-
对索引列使用函数或表达式,或参与计算(优化方法:将计算移到条件右侧:)例
优化 -
对索引列进行隐式类型转换,条件中的数据类型与索引列的数据类型不匹配,会进行隐式类型转换
-
以like 通配符开头索引无效,优化方法:尽量避免以通配符开头的LIKE查询
-
or 语句前后没有同时使用索引,当且仅当 or 语句查询条件的前后列均为索引时,索引生效。
-
复合索引未遵循最左前缀原则,复合索引(多列索引)只有在查询条件遵循最左前缀原则时才会生效
-
查询条件中使用NOT或!=,<>,使用IS NULL或IS NOT NULL,原因:索引(B+数)适合快速定位某个具体的值或范围,但不适合排除某些值。其次索引列不包含null值,所以会导致全表扫描,is not null 数据量太大,优化器认为全表扫描更快
-
查询返回大量数据,如果查询返回的数据量超过表总数据量的较大比例(通常超过20%-30%),MySQL可能会放弃使用索引,选择全表扫描。优化方法:尽量缩小查询范围,或使用分页查询。