索引未生效情况
- 使用了like,且以通配符开头('%abc...')mysql索引失效会变成全表扫描的操作
- 加了联合索引,如果where条件中是OR关系,索引不起作用
- 加了联合索引,但是使用时没有符合最左原则(联合索引采用最左原则);
- 不要在索引列上做任何操作(计算、函数、(自动or手动)类型转换),会导致索引失效而转向全表扫描
SELECT * FROM `tbl_shopmall_product_template` WHERE LEFT(productName,2) = '冬瓜吊瓜' 会导致全表扫描 - 如果列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引
SELECT * FROM `tbl_shopmall_product_template` WHERE productName = 1 扫全表 - mysql 在使用不等于(!= 或者<>)的时候有时候无法使用索引会导致全表扫描
- mysql中,如果条件中有or,即使其中有条件带索引也不会使用(这也是为什么尽量少用or的原因)。要想使用or,又想让索引生效,只能将or条件中的每个列都加上索引
- 如果某个数据列里包含着许多重复的值,就算为它建立了索引也不会有很好的效果。比如说,如果某个数据列里包含了净是些诸如“0/1”或“Y/N”等值,就没有必要为它创建一个索引。
- 如果mysql估计使用全表扫描要比使用索引快,则不使用索引