文档章节

Mysql 在 order by 时索引的使用机制

big_cat
 big_cat
发布于 2016/04/26 17:49
字数 478
阅读 193
收藏 6

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

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

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

主键 : id

索引 :capture_time    capture_time_id 

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

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

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

结果:不使用索引

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

索引生效

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

5:where 字段包含 order by 字段

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

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

7:附加 limit 查询

我已经实例不下去了:

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 什么的

 

© 著作权归作者所有

big_cat
粉丝 48
博文 233
码字总数 160865
作品 0
长宁
后端工程师
私信 提问
MySQL高性能的索引策略(四)

MySQL高性能的索引策略(四) 使用索引扫描来做排序 mysql有两种方式可以生成有序的结果:通过排序操作;或者通过索引顺序扫描;如果explain出来的type列的值为index,则说明mysql使用了索引...

秋风醉了
2015/08/22
0
0
mysql 索引优化order by 语句

MySql创建索引时支持ASC或DESC排序。 下面举例 创建表时同时创建索引降序排序(sname 字段上普通索引降序) create table tbl1 ( id int unique, sname varchar(50), index tbl1indexsname(s...

君千殇520
2017/11/06
0
0
Mysql SQL语句优化

最近找时间看了下Mysql 5.1的参考手册,作为一个开发者我对自己的要求是重点看看Mysql Replication的原理及机制,以及各种Mysql的Sql优化,毕竟稍微大点的公司都会有更专业的DBA来做数据库优...

Ambitor
2016/03/04
117
1
MySQL如何建索引以及利用索引优化ORDER BY排序语句

MySQL索引的创建、删除和查看 1.索引作用 在索引列上,除了上面提到的有序查找之外,数据库利用各种各样的快速定位技术,能够大大提高查询效率。特别是当数据量非常大,查询涉及多个表时,使...

说谎的少年
2014/10/09
0
0
主流数据库分页查询介绍

1 背景概述 由于在项目中需要在页面上显示数量非常多的数据, 在进行数据库查询时首先会把所有的数据都查询出来,然后在进行显示,这时候分页查询的操作就必不可少了,本文介绍Mysql、Oracl...

数通畅联
2015/11/26
185
0

没有更多内容

加载失败,请刷新页面

加载更多

任务调度-单体应用定时任务解决方案

1. 应用场景: 单体应用(并发少、就公司内部使用)、业务比较简单、单一、稳定,传统行业首选,项目初期。 2. 主要方式: Spring XML配置方式,timer。 <bean id="cycleBonusTimer" class="...

秋日芒草
34分钟前
3
0
EditText中singleLine过期替代方法

android:lines="1" android:inputType="text"

球球
48分钟前
1
0
删除 Tomcat-webapps 目录自带项目

本文将 %CATALINA_HOME% 目录称为“tomcat”目录。 1.webapps目录中的项目 在 Tomcat 8.0 的 tomcat/webapps 目录中,含有 5 个 Tomcat 自带的 Web 项目,如下所示: docs 有关于 Tomcat 的介...

Airship
52分钟前
3
0
好文:华杉:我等用功,不求日增,但求日减。减一分人欲,则增一分天理,这是何等简易!何等洒脱!

#写在前面1.怎么理解“减一分人欲,则增一分天理,这是何等简易!”?1)华杉提倡 “一劳永逸” 排除浪费,少干活,多赚钱,一战而定,降低作业成本。2)华杉提倡学海无涯,回头是岸...

阿锋zxf
今天
3
0
vue 的bus总线

bus声明 global.bus = new Vue() 事件发送 controlTabbar () {global.bus.$emit('pickUp', 'ddd')}, 事件接收 global.bus.$on('pickUp', (res) => {this.isFocus = true})......

Js_Mei
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部