mysql(慢查询优化)

1.Where 条件查询太慢怎么办(使用explain查询计划去查看)
①覆盖索引
查询语句从执行到返回结果均使用同一个索引,覆盖索引可以有效的减少回表
explain,可以查询sql的执行计划
覆盖索引可以通过取消回表的操作提升查询速度
如果查询用了不止一个字段,则不是覆盖索引
减少使用*的使用,优化联合索引,减少查询不必要的数据

image.png

image.png

image.png


两张表的区别

image.png


原表有主键和辅助索引,store_id 和film_id

2.有更合适的索引不走,怎么办
①mysql在选取索引的时候,会参考索引的基数
②基数是mysql估算出来的,反应这种字段有多少取值
③选取几个页算出取值的平均值,在乘以页数,即为基数(选取几个b+树的叶子节点)

image.png

image.png


基数

image.png


mysql在选择索引的时候,会首先考虑索引的区分度,同一条数据,你选取的区分度越大选取的可能性越大
如果估算不对,就要使用强制使用索引,在sql语句后加上 force index
可以让mysql重新估算-优化索引
analyze table 可以重新统计索引信息
根据索引基数,可以判断索引性能的好坏
3.count慢,怎么办
count(非索引字段):无法使用覆盖索引,最慢
count(索引字段):可是使用覆盖索引但依然要取出数据判空
count(1):不需要取出数据,但需要判断“1是否为null”
count(*):经过专门优化,不需要判空,理论最快
4.order by 慢,怎么办

对中间结果集按照ORDER字段排序

SELECT*FROMFIMWHEREFIM_ID>80ORDERBYTITLE

回表生成完整结果集(若需要)

将查询结果放入SORTBUFER

根据WHERE等条件查询

image.png


中间结果集

中间表大于SORTBUFFERSIZE时,放在硬盘中

若需要优化排序查询时间,增大SORTBUFFERSIZE

若需要优化内存占用,减小SORTBUFFERSIZE

中间表比较小时,直接放在内存中

image.png


回表生成完整结果集

当行小于MAXLENGTH_FOR_SORTDATA时,生成全字段中间表

大于值时,只生成排序字段+主键中间表,需要回表

调大值并不一定改善效率,因为太大的结果集排序效率低

image.png


最高效-索引覆盖

索引覆盖可以跳过生成中间结果集,直接输出查询结果

ORDER字段需要有索引(或在联合索引左侧)

其他相关字段(条件,输出)均在上述的索引引中

SELECTFILMID,TITLEFROMFILMORDERBYTITLE

image.png

若有收获,就点个赞吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值