博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Mysql 在 order by 时索引的使用机制
阅读量:6406 次
发布时间:2019-06-23

本文共 875 字,大约阅读时间需要 2 分钟。

hot3.png

今天在这里用最简单粗暴的实例方式的方法来验证下这个让同志们抓不着节奏的 order by 和 索引之间的关系

条件:1300w 条数据(呃,公司测试数据而已,不要在意)

            order by 中的所有字段都包含索引

180236_X2Ce_252076.png

主键 : id

索引 :capture_time    capture_time_id 

1:查询字段不包含 order by 字段

180809_DCY9_252076.png

结果:不使用索引 还特么上了 filesort 卡死你丫的

2:查询字段包含 order by 字段 + 其他字段

180816_GdL1_252076.png

结果:不使用索引

3:查询字段只包含 order by 字段

180824_yF5i_252076.png

索引生效

4:where 字段不包含 order by 字段

182019_xnIr_252076.png

5:where 字段包含 order by 字段

182025_15zh_252076.png

6:where 字段只包含 order by 字段

182034_L0Pt_252076.png

所以 where 查询只是能辅助而已 并不能真正避免 filesort

7:附加 limit 查询

182251_dQ7b_252076.png

182251_Fva3_252076.png

我已经实例不下去了:

1、若 select 字段集中包含 order by 字段集中以外的字段,则 order by 不使用索引

2、若 select 字段集与 order by 字段集一致(顺序无碍),则 order by 使用索引(当然要存在符合此字段集顺序的组合索引)

3、where 条件只是能在 Extra 中辅助作用而已

4、若添加 limit 查询则 order by 会使用索引, 无论 select 的字段集与 order by 是否一致(我觉得这个最有用,通常情况下我们很难保证select 字段集 和 order by 字段集对等的关系,而使用 limit 附加查询则可激活 order by 中最左匹配原则下的索引),再说了分页查询非常普及

今天被打败了,如果数据量很大的话,比如 order by id limit 1000000000,10 id的索引也不会被启用的,哎,大家还是多多的explain吧,开启 slow_query_log 什么的

 

转载于:https://my.oschina.net/sallency/blog/666582

你可能感兴趣的文章
html5新添加的表单类型和属性
查看>>
Kafka 之 入门
查看>>
Office PPT中如何插入flash
查看>>
PYTHON HTML.PARSER库学习小结--转载
查看>>
yii2:行为
查看>>
Yii设置Cache缓存的方法
查看>>
SSM整合学习笔记
查看>>
openStack虚拟机error 错误状态基于差异镜像+基镜像做恢复
查看>>
java el表达式报空指针异常(nullpointexception)
查看>>
cordova-plugin-local-notifications发送Android本地消息
查看>>
在此处打开OpenPowershellHere右键 在此处打开命令窗口右键
查看>>
zookeeper入门之Curator的使用之几种监听器的使用
查看>>
[转]Reporting Service部署之访问权限
查看>>
mysql导入文件出现Data truncated for column 'xxx' at row 1的原因
查看>>
innerxml and outerxml
查看>>
负载均衡服务器如何保证上传文件同步
查看>>
发现一个逆天功能:网页里挂载浏览器怎么做到的呢?
查看>>
php实现字符串的排列(交换)(递归考虑所有情况)
查看>>
SharePoint 取消分享时的默认发邮件
查看>>
基于ZedBoard的Webcam设计(一):USB摄像头(V4L2接口)的图片采集【转】
查看>>