MySQL的隐式转换

2021-09-21  本文已影响0人  后厂村村长

MySQL在什么情况下会产生隐式转换

当查询条件左右两侧类型不匹配的时候会发生隐式转换,可能导致查询无法使用索引。
下面分析两种隐式转换的情况:

EXPLAIN select * from user where uid   = '2'
EXPLAIN select * from user where uid   = 2

如果数据库的uid字段是char或varchar,查询条件为数字类型,这时就会发生隐式转换:

不过,这时并没有太大影响,因为int类型的数字2只能转化为'2',是唯一确定的。所以虽然有隐式转换,但不影响使用索引,不会导致慢查询。

所以说上面的例子中,两种情况都可以用到索引,也就是说,可以为所有的数字都加上引号,不会因为无法命中索引,导致慢查询。

负面的隐式转换

如果反过来,上面的例子中,uid 在数据库中不是字符串类型,而是数字类型,这时,执行语句:EXPLAIN select * from user where name= 2,就可能出现 全表查询 的慢查询情况。

因为等号两侧类型不一致,会产生隐式转换,虽然查询条件仅为字符串 '2',但能转化为数字 2 的情况却很多;

比如'2',' 2','2abc',都会被转化成 2,故MySQL无法使用索引只能进行全表扫描,导致了慢查询的产生。

上一篇下一篇

猜你喜欢

热点阅读