mysql隐式类型转换的坑

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

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

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

而当把SQL改为:

或者

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

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

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

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

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

mysql隐式类型转换的坑》有5个想法

  1. Pingback引用通告: 【mysql数据库】汇总 – FIXBBS

  2. Pingback引用通告: MySQL隐式转换解决方案 – 问开博客

  3. Pingback引用通告: MySQL隐式转换解决方案 | 周知博客

发表评论

您的电子邮箱地址不会被公开。