索引优化和使用

一、索引

 索引:用于提升数据库查询效率。索引的原理是用于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分析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值