索引优化和使用

一、索引

 索引:用于提升数据库查询效率。索引的原理是用于B+树的数据结构,可查看https://zh.wikipedia.org/wiki/B%2B%E6%A0%91

二、建立索引的原则

1.最左匹配原则:mysql会根据索引向右匹配字段,直到匹配无效。范围查询(>,<,like)等会使得索引停止匹配。 但是在sql查询中

字段的顺序是不影响索引的匹配顺序的。mysql会根据sql进行匹配优化。例如,索引是(a,b,c,d) ,sql:a =1 and d = 2 and b like "3%" and c > 4。索引会在c处失效d的索引无法使用到。

2.索引列并不能参与逻辑运算和函数。例如 a = 1 and b = 3 and c + 1= 4 and d = 3。c字段以后的索引是无效的

3.字段的区分度。按照索引的区分度来说,字段的区分度越高那么扫描的行数越少,效率越高,因此count(distinct col)/count(*)公式可以计算字段不重复的区分度,越高说明字段的区分度越高,效率越好。但是个人觉得这个公式不是觉得定理,还要区别不同的场景的使用。例如,select * from plan where taobao_id =1223 and num_iid =1345243。虽然num_iid 比 taobao_id的区分度高,但是(taobao_id,num_iid)可以满足不同的查询需求。

三、慢sql的查询

对于慢sql'的查询最好的工具就是Explain关键字

0.先运行看看是否真的很慢,注意设置SQL_NO_CACHE
1.where条件单表查,锁定最小返回记录表。这句话的意思是把查询语句的where都应用到表中返回的记录数最小的表开始查起,单表每个字段分别查询,看哪个字段的区分度最高
2.explain查看执行计划,是否与1预期一致(从锁定记录较少的表开始查询)
3.order by limit 形式的sql语句让排序的表优先查
4.了解业务方使用场景
5.加索引时参照建索引的几大原则
6.观察结果,不符合预期继续从0分析

猜你喜欢

转载自blog.csdn.net/qq_28126793/article/details/82218588