mysql5.7 索引与order by&&group by

本文介绍了MySQL5.7中关于索引与`ORDER BY`和`GROUP BY`的优化策略。强调了排序时使用索引的重要性,指出只有当`ORDER BY`或`GROUP BY`的条件满足索引的最左前缀法则,并且查询字段被索引覆盖时,才能有效利用索引。同时,建议避免全表扫描,尽可能使用覆盖索引,并给出了不同场景下的示例来说明何时会出现`Using filesort`。
摘要由CSDN通过智能技术生成

1、MySQL支持两种方式的排序filesort和index,Using index是指MySQL扫描索引本身完成排序。index效率高,filesort效率低。
2、order by满足两种情况会使用Using index。
        1) order by语句使用索引最左前列 && 查询的字段被索引覆盖覆盖
        2) 使用where子句与order by子句条件列组合满足索引最左前列&& 查询的字段被索引覆盖覆盖。
3、尽量在索引列上完成排序,遵循索引建立(索引创建的顺序)时的最左前缀法则。
4、如果order by的条件不在索引列上,就会产生Using filesort
5、能用覆盖索引尽量用覆盖索引
6、group by与order by很类似,其实质是先排序后分组,遵照索引创建顺序的最左前缀法则。对于group by的优化如果不需要排序的可以加上order by null禁止排序。注意,where高于having,能写在where中的限定条件就不要去having限定了。

  • 联合索引中间字段排序也可以使用到索引---where 和 order by中的所有条件满足联合索引即可

EXPLAIN SELECT * from employees_inndb WHERE NAME = 'LiLei' and position = 'dev'  ORDER BY age

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值