sql优化之order by,group by,limit,join

本文介绍了MySQL中SQL优化的关键点,包括Order By的Using index和Using filesort,Limit分页查询的优化策略,Join查询的嵌套循环连接和基于块的嵌套循环连接算法,以及不同计数方式的效率对比。通过实例分析和优化建议,帮助提升数据库查询性能。
摘要由CSDN通过智能技术生成

一、order by

针对联合索引:

mysql中InnoDB排序一般有两种排序方式,Using index和Using filesort。一个锁索引排序,效率高。一个是文件排序,效率低。

1.order by语句使用最左前列。

2.where子句和order by字句组合使用最左前列

3.能使用覆盖索引尽量使用覆盖索引

4.group by 和order by很类似,实质是先排序后分组,如果不想排序,可以order by null禁止排序。

针对Using filesort有两种排序方式:

单路排序:根据条件把需要的字段全局查询出来,加载到sortbuffer中,然后根据排序字段进行排序,最后直接从内存中把排好序的结果返回去。

双路排序(回表排序):根据条件把记录id,排序字段加载到sort buffer中,然后根据排序字段进行排序,在根据id回表查询,在把结构返回。

是选择单路排序还是双路排序,mysql根据系统变量max_length_for_sort_data(1024kb)比对,如果查询的字段总长度超过这个值,则选择双路排序,如果小于这个值 则选择单路排序。这个变量是可以修改的(当然不见修改)。

对比两种排序方式:

1.单路排序占用的内存空间较大,但是速度很快。

<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值