MySql 索引优化 和 避免索引失效

建表和索引
MySql 索引优化 和 避免索引失效_第1张图片

索引优化法则

MySql 索引优化 和 避免索引失效_第2张图片
全值匹配案例:
MySql 索引优化 和 避免索引失效_第3张图片

最佳左前缀法则:
在这里插入图片描述

如果中间断了,那么只部分使用了索引,只有前面的的字段使用了索引

MySql 索引优化 和 避免索引失效_第4张图片

不在索引列上做任何操作(计算,函数,…)
MySql 索引优化 和 避免索引失效_第5张图片

索引中范围条件右边的列全失效
MySql 索引优化 和 避免索引失效_第6张图片

尽量使用覆盖索引

覆盖索引,直接去索引中取数据,不去表中取数据,大大提高效率
MySql 索引优化 和 避免索引失效_第7张图片

mysql 在使用不等于(!= 或者 <>)的时候无法使用索引导致全表扫描
MySql 索引优化 和 避免索引失效_第8张图片

is null , not null 也无法使用索引
MySql 索引优化 和 避免索引失效_第9张图片

like以通配符开头(‘%abc…’) mysql索引失效会变成全表扫描

案例如下: %只有写在最右边的索引才会生效
MySql 索引优化 和 避免索引失效_第10张图片

解决like '%字符串%'时索引不被使用的方法?(使用覆盖索引解决)

使用覆盖索引,查询的字段尽量是索引的字段
在这里插入图片描述
未使用覆盖索引会失效,查询的字段没有索引
email 没有使用索引MySql 索引优化 和 避免索引失效_第11张图片

字符串不加单引号索引失效
MySql 索引优化 和 避免索引失效_第12张图片

少用or,用来连接时会导致索引失效
MySql 索引优化 和 避免索引失效_第13张图片

总结

MySql 索引优化 和 避免索引失效_第14张图片

案例

ordey by 排序 也要是 最佳左前缀法则,不然排序会失效
MySql 索引优化 和 避免索引失效_第15张图片
在这里插入图片描述

索引优化建议

MySql 索引优化 和 避免索引失效_第16张图片

你可能感兴趣的:(数据库)