(4)mysql 索引使用优化 OrderBy与GroupBy、IN和Exists

本文介绍了MySQL中如何优化索引的使用,重点关注OrderBy子句与GroupBy操作,以及IN和Exists的优化策略。通过多个示例分析了索引在不同场景下的应用,强调了小表驱动大表的原则,以及ORDER BY和GROUP BY对索引的要求。
摘要由CSDN通过智能技术生成

1.索引 Order By的使用

1.总结(下面示例)

  1. mysql有两种方式可以生成有序的结果:通过排序操作或者按索引顺序扫描,如果explain出来的type列的值为index,则说明mysql使用了索引扫描来做排序
  2. 扫描索引本身是很快的,因为只需要从一条索引记录移动到紧接着的下一条记录。但如果索引不能覆盖查询所需的全部列,那么就不得不每扫描一条索引记录就得回表查询一次对应的行,这基本都是随机IO,因此按索引顺序读取数据的速度通常要比顺序地全表扫描慢
  3. mysql可以使用同一个索引即满足排序,又用于查找行,如果可能的话,设计索引时应该尽可能地同时满足这两种任务。
  4. 只有当索引的列顺序和order by子句的顺序完全一致,并且所有列的排序方式都一样时,mysql才能够使用索引来对结果进行排序,如果查询需要关联多张表,则只有当orderby子句引用的字段全部为第一张表时,才能使用索引做排序。order by子句和查找型查询的限制是一样的,需要满足索引的最左前缀的要求,否则,mysql都需要执行顺序操作,而无法利用索引排序

2.示例与解释

准备一张表test,列有id,c1,c2,c3,c4,c5,.建有组合索引index_c1234(c1,c2,c3,c4)


1.EXPLAIN SELECT * FROM test WHERE c1='a1' AND c2='a2'  AND c4='a4' ORDER BY c3

t图一
注:上面SQL只有索引c1,c2用于查找,order by c3用到了索引排序,c4,未使用索引


2.EXPLAIN SELECT * FROM test WHERE c1='a1' AND c2='a2'  ORDER BY c4

在这里插入图片描述
注:查询c1,c2用到了索引,由于order by c4中间断了c3,所以c4排序未使用到索引

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值