查询语句优化

本文探讨了SQL查询优化的几个关键策略,包括选择小表驱动大表、orderby和groupby关键字的优化。通过开启慢查询捕获,利用explain和showprofile分析,可以深入理解SQL的执行过程并进行参数调优。对于orderby,应尽量利用索引避免FileSort。而在groupby操作中,优化策略包括遵循索引最佳左前缀和调整内存参数。这些技巧有助于提升数据库性能和查询效率。
摘要由CSDN通过智能技术生成

具体使用

1、慢查询的开启并捕获
2、 explain+慢SQL分析
3 、show profile查询QL在Mysq1服务器里面的执行细节和生命周期情况
4、SQL数据库服务器的参数调优

1、永远小表驱动大表

外查询表大,子查询表小,选择IN;外查询表小,子查询表大,选择EXISTS;若两表差不多大,则差不多。

在这里插入图片描述

2、order by 关键字优化

(1)order by 子句,尽量使用Index方式排序,避免使用FileSort方式排序

Mysql支持二种方式的排序, Filesortndex和, Index效率高
ORDER BY满足两情况,会使用 Index方式排序:
① ORDER BY语句使用索引最左前列
②使用 Where子句与order BY子句条件列组合满足索引最左前列
在这里插入图片描述

(2)尽可能在索引列上完成排序操作,遵照索引键的最佳左前缀
(3)如果不在索引列上,file sort有两种算法:MySQL就要启动双路排序和单路排序
① 双路排序:Mysql4.1之前是使用双路排序字面意思就是两次扫描磁盘,最终得到数据,
读取行指针和 order by列,对他们进行排序,然后扫描已经排序好的列表,按照列表中的值重新从列表中读取对应的数据输出;
从磁盘取排序字段,在 buffer缓冲区进行排序,再从磁盘取其他字段。
②单路排序
取一批数据,要对磁盘进行了两次扫描,众所周知,Io是很耗时的,所以在 mysq44.1之后,出现了第二种改进的算法,就是单路排序。
所谓单路排序:从磁盘读取查询需要的所有列,按照 order by列在buffer缓冲区对它们进行排序,然后扫描排序后的列表进行输出,它的效率更快一些,避免了第二次读取数据。并且把随机IO成了顺序IO,但是它会使用更多的空间,因为它把每一行都保存在内存中了。
由于单路是后出的,总体而言好过双路,但是用单路也存在一些文体:
在这里插入图片描述
优化策略:
增大sort_buffer_size参数的设置
增大max_length_for_sort_data参数的设置
在这里插入图片描述
总结:
在这里插入图片描述

3、group by 关键字优化

① group by实质是先排序后进行分组,遵照索引建的最佳左前缀
②当无法使用索引列,增大 max_length_for_ sort_data参数的设置+增大 sort_buffer_size参数的设置
③ where高于having,能写在 where限定的条件就不要去having限定的条件了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

~四时春~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值