以下情况索引会失效:一、索引列上进行了函数操作;二、索引列上使用了运算符;三、索引列上进行了类型转换;四、索引列上使用了NULL值;五、索引列上的数据分布不均匀;六、索引列上存在大量重复值;七、索引列上进行了隐式类型转换;
一、索引列上进行了函数操作
当在索引列上进行函数操作时,如使用UPPER()
或LOWER()
函数对字符串进行大小写转换,或使用DATE()
函数对日期进行格式转换,索引就会失效。因为函数会改变列的值,从而使得索引无法正确匹配。
二、索引列上使用了运算符
一些运算符也会导致索引失效,如使用LIKE
或NOT LIKE
操作符进行模糊匹配,或使用<>
或!=
操作符表示不等于。这是因为运算符会改变列的值,从而使得索引无法匹配。
三、索引列上进行了类型转换
当在索引列上进行类型转换时,如将字符串转换为数字,或将日期转换为字符串,索引也会失效。因为类型转换会改变列的值,从而使得索引无法正确匹配。
四、索引列上使用了NULL值
当在索引列上使用了NULL值时,索引也会失效。因为NULL值无法与其他值进行比较或匹配,所以无法使用索引。
五、索引列上的数据分布不均匀
当索引列的数据分布不均匀时,索引也会失效。例如,在一个包含10000个记录的表中,如果一个值的出现频率非常高,那么使用索引查询该值时,由于需要扫描的记录太多,反而会导致查询变得缓慢。
六、索引列上存在大量重复值
当索引列上存在大量重复值时,索引也会失效。因为索引是按照值来排序的,如果存在大量重复值,那么索引就无法正确排序,从而导致查询变得缓慢。
七、索引列上进行了隐式类型转换
当在索引列上进行隐式类型转换时,索引也会失效。例如,在一个VARCHAR类型的列上进行比较时,如果使用了数字,那么就会发生隐式类型转换,从而导致索引失效。
延伸阅读:
什么是索引?
在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。
索引提供指向存储在表的指定列中的数据值的指针,然后根据您指定的排序顺序对这些指针排序。数据库使用索引以找到特定值,然后顺指针找到包含该值的行。这样可以使对应于表的SQL语句执行得更快,可快速访问数据库表中的特定信息。
文章标题:什么时候索引会失效,发布者:Flawy,转载请注明出处:https://worktile.com/kb/p/53495