SQL实战之索引失效案例详解
文章目录
- 总体原则
- 案例一:索引第一个字段不能丢,否则索引失效
- 案例二:索引列上少计算
- 案例三:范围之后全失效
- 案例四:尽量少使用select *、不等于(!=或者<>)、is null,is not null、%加尽量右边
- 小总结
总体原则
1、全值匹配我最爱2、最佳左前缀法则:指的是查询从索引的最左前列开始且不跳过索引中的列。(带头大哥不能死,中间兄弟不能断)3、不在索引列上做任何操作(计算、函数、自动or手动类型转换),会导致索引失效而转向全表扫描type=all(索引列上少计算)4、不能使用索引中范围条件右边的列(范围之后全失效)5、尽量使用覆盖索引(索引列和查询列一致),(尽量减少使用select *)6、like以通配符开头mysql索引失效会变成全表扫描的操作 (like %加右边)7、字符串varchar不加单引号索引失效(字符串里留引号)8、is null,is not null, or, != 无法使用索引会导致全表扫描SQL索引优化口诀全值匹配我最爱,最左前缀要遵守;带头大哥不能死,中间兄弟不能断;索引列上少计算,范围之后全失效;LIKE百分写最右,覆盖索引不写星;不等空值还有or,索引失效要少用;VAR引号不可丢,SQL高级也不难!
案例一:索引第一个字段不能丢,否则索引失效
新建索引:ALTER TABLE staffs ADD INDEX idx_ staffs nameAgePos(name, age, pos),