10. MySQL单表索引优化

1. 全值匹配我最爱

where后面有多少个筛选字段就建多少个索引

10. MySQL单表索引优化
10. MySQL单表索引优化

2. 最佳左前缀法则

从索引的第一个字段开始,从左到右,依次命中,不能跳过索引中的任何一列,一旦跳过某个字段,会导致后面的字段都无法使用

以下面这个为例,虽然可以正常使用,但是只有部分被用到了
10. MySQL单表索引优化
这个就是完全没用上索引

10. MySQL单表索引优化

3. 不在索引列上做任何操作

为索引字段添加函数、运算、(字段or手动)类型转换都会导致索引失效

案例一、

10. MySQL单表索引优化

案例二、

10. MySQL单表索引优化

4. 范围字段放最后

如果范围查询的字段右边还有其它字段则会导致索引失效

以下面这个为例,索引idx_age_deptid_name只生效到范围查询,后面的name则没有生效

10. MySQL单表索引优化

正确顺序应该改成这样idx_age_name_deptid

5. 不要使用不等于(!= 或者<>)

会导致全表扫描索引失效

10. MySQL单表索引优化

6. is not null无法使用索引

is null可以

10. MySQL单表索引优化

7. 使用like时,不以通配符%开头

会导致索引失效

10. MySQL单表索引优化

8. where后面的条件不能做类型转换

有=的where条件时,一定要保证=左右的数据类型一致,否则会导致索引失效

10. MySQL单表索引优化