美文网首页
MySQL的隐式转换

MySQL的隐式转换

作者: 后厂村村长 | 来源:发表于2021-09-21 19:33 被阅读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无法使用索引只能进行全表扫描,导致了慢查询的产生。

    相关文章

      网友评论

          本文标题:MySQL的隐式转换

          本文链接:https://www.haomeiwen.com/subject/vzkigltx.html