10. MySQL单表索引优化
1. 全值匹配我最爱
where后面有多少个筛选字段就建多少个索引
2. 最佳左前缀法则
从索引的第一个字段开始,从左到右,依次命中,不能跳过索引中的任何一列,一旦跳过某个字段,会导致后面的字段都无法使用
以下面这个为例,虽然可以正常使用,但是只有部分被用到了
这个就是完全没用上索引
3. 不在索引列上做任何操作
为索引字段添加函数、运算、(字段or手动)类型转换都会导致索引失效
案例一、
案例二、
4. 范围字段放最后
如果范围查询的字段右边还有其它字段则会导致索引失效
以下面这个为例,索引idx_age_deptid_name
只生效到范围查询,后面的name则没有生效
正确顺序应该改成这样idx_age_name_deptid
5. 不要使用不等于(!= 或者<>)
会导致全表扫描索引失效
6. is not null无法使用索引
is null可以
7. 使用like时,不以通配符%开头
会导致索引失效
8. where后面的条件不能做类型转换
有=的where条件时,一定要保证=左右的数据类型一致,否则会导致索引失效