索引失效的五种情况? 优缺点?

  • Post author:
  • Post category:其他



1.如果条件中有or,即使其中有条件带索引也不会使用(这也是为什么尽量少用or的原因)


要想使用or,又想让索引生效,只能将or条件中的每个列都加上索引


2.对于多列索引,不是使用的第一部分,则不会使用索引


3.like查询以%开头

假如有这样一列code的值为’AAA’,’AAB’,’BAA’,’BAB’ ,如果where code like ‘%AB’条件,由于前面是

模糊的,所以不能利用索引的顺序,必须一个个去找,看是否满足条件。这样会导致全索引扫描或者全表扫

描。如果是这样的条件where code like ‘A % ‘,就可以查找CODE中A开头的CODE的位置,当碰到B开头的

数据时,就可以停止查找了,因为后面的数据一定不满足要求。这样就可以利用索引了。


4.如果列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引


5.如果mysql估计使用全表扫描要比使用索引快,则不使用索引


索引的优点

  • 大大减少了服务器需要扫描的数据量
  • 可以帮助服务器避免排序或减少使用临时表排序
  • 索引可以随机I/O变为顺序I/O


索引的缺点

  • 需要占用磁盘空间,因此冗余低效的索引将占用大量的磁盘空间
  • 降低DML性能,对于数据的任意增删改都需要调整对应的索引,甚至出现索引分裂
  • 索引会产生相应的碎片,产生维护开销



版权声明:本文为changfangyuansh原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。