mysql隐式类型转换的坑

今天遇到一个性能有问题的SQL,此前没有遇到过,非常奇葩,特此记录一下。

有一个表里包含一个int类型的brand_id,有索引。

当explain下面的SQL时发现扫描了全表,花费了100毫秒。

而当把SQL改为:

或者

都可以走索引,时间不到1毫秒。

IN中都是字符串或者都是整形,都可以走索引,而混合的情况就扫全表,什么情况?

问了一下DBA同学,在混合类型的情况下,mysql就不会对输入值进行隐式类型转换了,因此无法走int类型的索引检索。而当它们都是字符串的时候是会对输入值隐式转换为int并走索引进行检索。

知乎上有一点讨论,可以参考

如果文章帮助您解决了工作难题,您可以帮我点击屏幕上的任意广告,或者赞助少量费用来支持我的持续创作,谢谢~