欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

mysql隐式转换导致索引失效(失效原因分析)

程序员文章站 2022-03-31 11:43:06
当操作符与不同类型的操作数一起使用时,会发生类型转换以使操作数兼容。某些转换是隐式发生的。某些隐式转换会导致索引失效。1. in 参数包含多个类型2. 判断符合左边是字符串,右边是数字,列如 where a = 123 其中a是字符类型 左边是数字,右边是字符串,这种隐式转换后索引仍然有效。 分析: 根据官方转换规则, 一边数字一边字符串,两边都会转换为浮点数进行比较。 a: 左边数字,右边字符串情况: 索引有效: 左边作为检索项,数......

当操作符与不同类型的操作数一起使用时,会发生类型转换以使操作数兼容。某些转换是隐式发生的。

 某些隐式转换会导致索引失效。

 

 1. in 参数包含多个类型

2. 判断符合左边是字符串,右边是数字,列如  where a = 123  其中a是字符类型

      左边是数字,右边是字符串,这种隐式转换后索引仍然有效。

     分析:

    根据官方转换规则,  一边数字一边字符串,两边都会转换为浮点数进行比较。

   a: 左边数字,右边字符串情况:  索引有效: 左边作为检索项,数字是唯一确定的,即数字转化为一个浮点数,这个数字是唯一的。

  b:左边字符串,右边数字情况:索引失效:左边作为检索项,转化为浮点数,字符串不唯一确定,列如  ‘10001’,‘10001a’,'10001b'都将转化为浮点数10001

     

3.多表join时,where左右两边的字段的字符集类型不一致。

本文地址:https://blog.csdn.net/qq_34707456/article/details/107179034