MYSQL : innodb 索引排序,文件排序与 建立的索引的关系 分析_大树叶的博客-CSDN博客_innodb where条件和 order by可以建立联合索引吗


本站和网页 https://blog.csdn.net/bigtree_3721/article/details/51340640 的作者无关,不对其内容负责。快照谨为网络故障时之索引,不代表被搜索网站的即时页面。

MYSQL : innodb 索引排序,文件排序与 建立的索引的关系 分析_大树叶的博客-CSDN博客_innodb where条件和 order by可以建立联合索引吗
MYSQL : innodb 索引排序,文件排序与 建立的索引的关系 分析
大树叶
于 2016-05-07 23:01:52 发布
1710
收藏
分类专栏:
数据库
mysql
文章标签:
mysql
ndb
索引排序
文件排序
数据库
同时被 2 个专栏收录
122 篇文章
0 订阅
订阅专栏
mysql
117 篇文章
1 订阅
订阅专栏
MySQL InnoDB B-Tree索引使用Tips
我们平常所说的索引,如果没有特别指明,都是指B+树结构组织的B-Tree索引。其中聚集索引,次要索引,覆盖索引,复合索引,前缀索引,唯一索引默认都是使用B+树索引,统称索引。当然,除了B+树这种类型的索引之外,还有哈稀索引(hash index)等。
这里主要讨论一下InnoDB B-Tree索引的使用,不提设计,只管使用。B-Tree索引主要作用于WHERE和ORDER BY子句。这里讨论的均在MySQL-Server-5.1.42测试
CREATE TABLE `friends` ( `ID` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, `uid`bigint(20) UNSIGNED NOT NULL DEFAULT '0', `fuid` bigint(20) UNSIGNED NOT NULL DEFAULT'0', `fname` varchar(50) NOT NULL DEFAULT '', `fpicture` varchar(150) NOT NULL DEFAULT'', `fsex` tinyint(1) NOT NULL DEFAULT '0', `status` tinyint(1) NOT NULL DEFAULT '0',PRIMARY KEY (`ID`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; ALTER TABLE`friends` ADD INDEX uid_fuid (uid, fuid);
1.如果索引了多列,要遵守最左前缀法则。所谓最左前列,指的是查询从索引的最左前列开始,并且不跳过索引中的列。 第2条语句,从索引的第二列开始查找,使用索引失败,导致MySQL采用ALL访问策略,即全表查询.在开发中,应该尽量避免全表查询。 2.当MySQL一旦估计检查的行数可能会”太多”,范围查找优化将不会被使用。 第2条语句使用了全表查询,它与第1条语句唯一的区别在于需要检查的行数远远多于第1条语句。在应用中,可能不会碰到这么大的查询,但是应该避免这样的查 询出现: select uid from users where registered < 1295001384 3.索引列不应该作为表达式的一部分,即也不能在索引列上使用函数 第2和3条语句都有使用表达式,索引派不上用场。 4.尽量借用覆盖索引,减少select * from …语句使用 第1句Extra中使用了Using index表示使用了覆盖索引。第3句也使用了覆盖索引,虽然ID不在索引uid_fuid索引列中,但是InnoDB二次索引(second index)叶子页的值就是PK值,不同于MyISAM。Extra部分的Using index表示应用了索引,不要跟type中的index混淆。第2句没有使用覆盖索引,因为fsex不在索引中。 5.ORDER BY子句,尽量使用Index方式排序,避免使用FileSort方式排序 MySQL支持二种方式的排序,FileSort和Index,后者效率高,它指MySQL扫描索引本身完成排序。FileSort方式效率较低。ORDER BY满足以下情况,会使用Index方式排序:             a)ORDER BY 语句使用索引最左前列。参见第1句                     b)使用Where子句与Order BY子句条件列组合满足索引最左前列。参见第2句. 以下情况,会使用FileSort方式的查询
a)检查的行数过多,且没有使用覆盖索引。第3句,虽然跟第2句一样,order by使用了索引最左前列uid,但依然使用了filesort方式排序,因为status并不在索引中,所以没办法只扫描索引。 b)使用了不同的索引,MySQL每回只采用一个索引.第4句,order by出现二个索引,分别是uid_fuid和聚集索引(pk) c)对索引列同时使用了ASC和DESC。 通过where语句将order by中索引列转为常量,则除外。第5句,和第6句在order by子句中,都出现了ASC和DESC排序,但是第5句却使用了filesort方式排序,是因为第6句where uid取出排序需要的数据,MySQL将其转为常量,它的ref列为const。 d)where语句与order by语句,使用了不同的索引。参见第7句。 e)where语句或者ORDER BY语句中索引列使用了表达式,包括函数表达式。参见第8,9句 f)where 语句与ORDER BY语句组合满足最左前缀,但where语句中使用了条件查询。查见第10句,虽然where与order by构成了索引最左有缀的条件,但是where子句中使用的是条件查询。 g)order by子句中加入了非索引列,且非索引列不在where子句中。 h)order by或者它与where组合没有满足索引最左前列。参见第11句和12句,where与order by组合,不满足索引最左前列. (uid, fsex)跳过了fuid i)当使用left join,使用右边的表字段排序。参见第13句,尽管user.uid是pk,依然会使用filesort排序。
6.慎用left join语句,避免创建临时表 使用left join语句的时候,避免出现创建临时表。尽量不要用left join,分而治之。非要使用的时候,要询问自己是不是真要必须要使用。 7.高选择性索引列。 尽量使用高选择性的过引来过滤数据。高选择性指Cardinality/#T越接近1,选择性越高,其中Cardinality指表中索引列不重复值(行)的总数。PK和唯一索引,具有最高的选择性,即1。推荐可选性达到20%以上。 这里有二个索引可供使用,而MySQL选择PRIMARY,是因为它具有更高的选择性。 8.谨防where子句中的OR。where语句使用or,且没有使用覆盖索引,会进行全表扫描。应该尽量避免这样OR语句。尽量使用UNION代替OR 第1句虽然使用了索引,但是查行时间依然不可以恭维,mysql要检查的行很多,但是返回的行却很少.Extra中的using where表示需要通过where子句扔弃不需要的数据行。 9.LIMIT与覆盖索引 limit子句,使用覆盖索引时比没有使用覆盖索引会快很多
大树叶
关注
关注
点赞
收藏
评论
MYSQL : innodb 索引排序,文件排序与 建立的索引的关系 分析
我们平常所说的索引,如果没有特别指明,都是指B+树结构组织的B-Tree索引。其中聚集索引,次要索引,覆盖索引,复合索引,前缀索引,唯一索引默认都是使用B+树索引,统称索引。当然,除了B+树这种类型的索引之外,还有哈稀索引(hash index)等。MySQL InnoDB B-Tree索引使用Tips这里主要讨论一下InnoDB B-Tree索引的使用,不提设计,只管使用。B-T
复制链接
扫一扫
专栏目录
mysql order
weixin_33975951的博客
08-19
175
http://blog.sina.com.cn/s/blog_76abecad0100sicf.html
我们平常所说的索引,如果没有特别指明,都是指B+树结构组织的B-Tree索引。其中聚集索引,次要索引,覆盖索引,复合索引,前缀索引,唯一索引默认 都是使用B+树索引,统称索引。当然,除了B+树这种类型的索引之外,还有哈稀索引(hash index)等。
MySQL...
mysql的order by与where加了索引与没有加索引的结果集区别
hmy_362322的博客
10-28
9191
CREATE TABLE employees (
emp_no INT(11) NOT NULL,
birth_date DATE NOT NULL,
first_name VARCHAR(14) NOT NULL,
last_name VARCHAR(16) NOT NULL,
gender ENUM(‘M’,’F’) NOT NULL,
参与评论
您还未登录,请先
登录
后发表或查看评论
三种方法教你创建DB2联合数据库
12-07
本资源介绍了一种纯手动创建DB2联合数据库的方法,每个步骤配以文字和图片说明,手把手教你完成DB2联合数据库的创建。本资源还引用了网上常见的两种创建DB2联合数据库的方法供大家参考。
mysql desc by_谈谈MySQL中的降序索引 order by id DESC / ASC
weixin_39671631的博客
01-18
601
今天这篇主要讲order by 语句中的多个字段asc desc的问题。mysql5中,索引存储的排序方式是ASC的,没有DESC的索引。现在能够理解为啥order by 默认是按照ASC来排序的了吧?虽然索引是ASC的,但是也可以反向进行检索,就相当于DESC了。如果您在ORDER BY 语句中使用了 DESC排序,mysql确实会反向进行检索。在理论上,反向检索与正向检索的速度一样的快。但是在...
mysql order desc_Mysql ORDER BY DESC 降序排列 索引无效分析
weixin_39949889的博客
01-18
623
业务场景:Mysql版本5.7.22,查询设备生产的指定状态最新在制品,tt_wo_wip(引擎InnoDB)735951条数据,equip_id为32e4537e59404a589b7f1ec4a55ab69b大概由162675条无索引:4~5sEXPLAIN SELECT wip.pk_id FROM tt_wo_wip wip WHERE wip.equip_id = '32e4537e59...
mysql 索引 倒序_使用倒序索引提升ORDER BY DESC性能
weixin_29688227的博客
02-18
966
使用倒序索引(INDEX DESC),可以大幅提升带有order by desc子句的SQL语句性能。一、场景1、表名:test_t,有一字段名为object_id2、总数据量:580000行,segment_size:72MB3、Where条件(Owner=’SYS’ and Object_id>50000)的行数:32472行4、SQL语句:select * from test_t wh...
mysql排序order by asc | desc
weixin_46649054的博客
06-11
5827
1.排序查询
select 查询列表
form 表
【where 筛选条件】
order by 排序列表【asc|desc】
2.使用描述
1、asc代表的是升序,desc代表的是降序
如果不写,默认是升序
2、order by子句中可以支持单个字段、多个字段、表达式、函数、别名
3、order by子句一般是放在查询语句的最后面,limit子句除外
3.使用演示
3.1 查询员工信息,要求工资从高到低排序
#降序
SELECT * FROM employees ORDER BY salary D
mysql中的各种索引大总结
风团团
09-12
3695
文章目录为啥不用二叉搜索树?为啥不用平衡二叉(avl)树?为啥不用b-树?为啥用b+树?(重点)索引聚簇索引聚簇索引的缺点
大家都知道mysql索引底层使用的是b+树的数据结构,树有这么多种,那为啥就选择b+树呢?那就从为啥使用b+树开始,到分析其原理的思路一步步分析吧。
为啥不用二叉搜索树?
定义:
1:非空左子树的所有键值小于其根结点的键值。
2:非空右子树的所有键值大于其根结点的键值。
3:左、右子树都是二叉搜索树。就是左节点<根节点<右节点。
看下图树太高了。查询效率太低,故不推荐。
sql查询调优之where条件排序字段以及limit使用索引的奥秘
weixin_30466953的博客
02-08
1194
奇怪的慢sql
我们先来看2条sql
第一条:
select * from acct_trans_log WHERE acct_id = 1000000000009000757 order by create_time desc limit 0,10
第二条:
select * from acct_trans_log WHERE acct_id = 100000...
mysql排序order by的时候如何使用索引
Jiangbohao_的博客
09-03
5004
通常而言,就我们自己想象一下,假设你有一个select * from table where xxx=xxx order by xxx这样
的一个SQL语句,似乎应该是基于where语句通过索引快速筛选出来一波数据,接着放到内存里,或者
放在一个临时磁盘文件里,然后通过排序算法按照某个字段走一个排序,最后把排序好的数据返回。
但是这么搞通常速度有点慢,尤其是万一你要排序的数据量比较大的话,还不能用内存来排序,如果基
于磁盘文件来排序,那在MySQL里有一个术语,叫做filesort,这速度就比较慢了。
通常
order by与索引
qwert789p的博客
03-04
3833
ORDER BY 通常会有两种实现方法,一个是利用有序索引自动实现,也就是说利用有序索引的有序性就不再另做排序操作了。另一个是把结果选好之后再排序。
用有序索引这种,当然是最快的,不过有一些限制条件,来看下面的测试。
测试数据:student表有两个字段id ,sid ,id是主键。一共有20W条记录,id从1到200000,sid也是从1到200000的数据。
第一种情况 :
order...
Mysql里的order by与索引
weixin_43244698的博客
01-06
1223
Mysql里的order by与索引
sql order by与索引之间的关系(where条件出现字段才有效)
weixin_41981080的博客
10-08
9059
ORDER BY 通常会有两种实现方法,一个是利用有序索引自动实现,也就是说利用有序索引的有序性就不再另做排序操作了。另一个是把结果选好之后再排序。
用有序索引这种,当然是最快的,不过有一些限制条件,来看下面的测试。
测试数据:student表有两个字段id ,sid ,id是主键。一共有20W条记录,id从1到200000,sid也是从1到200000的数据。
第一种情况 :
order by的...
order by a desc,b desc与order by a,b desc不同
无痕的博客
04-08
2191
现象:
使用“order by h.lasttime desc,u.login_time desc limit 1”得到的结果中lasttime是1586334505,login_time是1586332849;
使用“order by h.lasttime, u.login_time desc limit 1”得到的结果中lasttime是1585589586,login_time是1...
mysql order by 索引_mysql order by 索引
weixin_39745345的博客
02-07
204
今天早上查看网站,发现非常慢!进Linux 用top查看,发现MySQL cpu到了100%。开始怀疑是mysql性能的问题,不会10万条数据就卡成这样吧?虽然我的linux是在服务器上放了个虚拟机,但也不至于10万条记录挂啊? 网上找了一大把文章,my.cnf也设置了,我虚拟机内存是2G,将key_buf设置成512M 还是卡。非常郁闷!最后没办法,只能用explain来找原因了。结果还真找到了...
mysql5.7 索引where和orderby排序问题
小李李
03-13
2385
索引(a,b,c)
select * from table where a=1 and b=2 order by a; 索引排序
select * from table where a=1 and b=2 order by b; 索引排序
select * from table where a=1 and b=2 order by c; 索引排序
select * from t...
mysql 查看索引命中_请问下如何在Mysql中where与orderBy后在命中索引?
weixin_35795357的博客
02-18
253
我现在大概有一个需求,是需要在数据库中查询一个列表。数据表的样子大概是这样的:ABCDE1112016-08-0540...............而我现在的SQL语句大概是这样的SELECT * FROM `TABLE` WHERE B = 1 AND C = 1 AND D = 2016-08-05 ORDER BY E DESC在这种情况下我应该怎么建立索引才能在查询的时候命中呢?建立ind...
mysql order by索引优化_» mysql 中where 和 order by 的索引优化 Sphinx 中文站
weixin_42299775的博客
02-07
377
mysql的where和order by 在一起时,order by 后的索引不能命中。有这样的问题:mysql> explain SELECT * FROM product WHERE compID = 120 LIMIT 0,15;+—-+————-+————+——+——————+———–+———+——-+——+——-+| id | select_type | table ...
mysql排序优化、排序的索引使用
最新发布
Morning Sunshine的IT技术博客
03-21
390
合理利用索引进行排序:
为了优化SQL语句的排序性能,最好的情况是避免排序,合理利用索引是一个不错的方法。
因为索引本身也是有序的,如果在需要排序的字段上面建立了合适的索引,那么就可以跳过排序的过程,提高SQL的查询速度。
·
MySQL查询支持filesort和index两种方式的排序:
filesort是先把结果查出,然后在内存中或磁盘中进行排序操作,效率较低。
index是指利用索引自动实现排序,不需另做排序操作,效率会比较高。
·
举例:
...
Mysql索引原理及优化总结
fenqinqizheng的博客
05-30
144
索引
定义:索引(Index) 是帮助MySQL高效获取数据的数据结构。
索引提高查询速度,降低了增删改的速度,
索引分类
单列索引:普通索引(key)、唯一索引(uniquekey)、主键索引(primary key)、全文索引(full
text)
多列索引:create table duolie (xing char(2),ming char(10),key xm(xing,ming));
作用区别:
创建索引
创建表时 key name(name), unique key email(email),
“相关推荐”对你有帮助么?
非常没帮助
没帮助
一般
有帮助
非常有帮助
提交
©️2022 CSDN
皮肤主题:编程工作室
设计师:CSDN官方博客
返回首页
大树叶
CSDN认证博客专家
CSDN认证企业博客
码龄8年
暂无认证
628
原创
1万+
周排名
1810
总排名
367万+
访问
等级
3万+
积分
1020
粉丝
701
获赞
285
评论
2256
收藏
私信
关注
热门文章
Form表单、四种常见的POST请求提交数据方式
94677
redis 最好的 GUI 客户端工具
82741
如何通过 Mybatis 向Mysql 插入Date 或者DateTime
61501
nginx 如何配置来获取用户真实IP
59194
Spring中 PROPAGATION_REQUIRED 解释
57267
分类专栏
config
2篇
yapi
1篇
docker
9篇
argo
1篇
jenkins
4篇
Eureka
4篇
navicat
1篇
CDH
2篇
fastjson
2篇
sentinel
2篇
股票
1篇
weave
3篇
perf
1篇
gitlab
2篇
harbor
1篇
jpa
1篇
mapper
1篇
flume
1篇
fio
java
492篇
c++
25篇
python
9篇
J2EE
8篇
EJB
3篇
J2EE JNDI
7篇
教育
1篇
面试
139篇
XML
7篇
数据库
122篇
hibernate
16篇
spring
102篇
aspect
3篇
AOP
11篇
HTML
16篇
struts2
9篇
tomcat
22篇
设计模式
10篇
NIO
10篇
http
12篇
反射
2篇
eclipse
5篇
mysql
117篇
运维
6篇
分布式系统
10篇
MQ
5篇
hadoop
22篇
Linux
15篇
sip
3篇
NoSQL
35篇
common pool
1篇
架构与分布式系统
60篇
nginx
40篇
web service
14篇
Restful
13篇
thrift
1篇
JVM
21篇
并发
21篇
网络编程
28篇
网络安全
13篇
数据结构
20篇
maven
15篇
jquery
3篇
velocity
4篇
tbschedule
4篇
mybatis
12篇
ecache
1篇
redis
42篇
json
21篇
秒杀系统
9篇
分布式调度框架
15篇
zookeeper
12篇
kafka
44篇
druid
21篇
mongodb
10篇
dubbo
4篇
sharding-jdbc
RocketMQ
4篇
java并发
15篇
UML
1篇
算法
10篇
mycat
4篇
lintcode
4篇
springmvc
13篇
netflix
2篇
jsp
2篇
安全
1篇
angular
3篇
微服务
17篇
实时数据库
大数据
22篇
K8S
21篇
istio
6篇
swagger
1篇
devops
1篇
vmware
elasticsearch
4篇
storm
1篇
黑白子
1篇
区块链
1篇
sprint boot
11篇
aws
4篇
log
1篇
m2m
2篇
mqtt
4篇
杀毒
3篇
dos
1篇
spring cloud
8篇
session
1篇
sticky
1篇
认证
2篇
windows
1篇
工作流
1篇
jhispter
1篇
springboot
16篇
activiti
5篇
lombok
1篇
leetcode
7篇
火车票
1篇
Centos
2篇
缓存
4篇
maxwell
1篇
MDC
1篇
flink
3篇
mapreduce
3篇
idea
1篇
Cloudera
最新评论
SpringBoot v2.x MongodB 中 去除 _class 字段
he_sk:
这个_class字段在实际开发中有什么不好的影响吗?为什么要删掉?
电商秒杀系统设计思路和实现方法
James_Rodríguez:
站点层设计是什么意思
网页中怎样禁止通过输入url直接访问
熬夜️工程师:
但没关系啊,你已经登录了,肯定可以到处访问了啊
如何在 Springboot 获取 http request和 http response 的几种方式
月半花开:
什么时候用reqt 而不用@pam
Harbor: 如何删除镜像的磁盘空间问题。
cdzy123:
老哥你搞了没?我的harbor仓库按照这个操作清理不了。你的搞了没
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
提交
最新文章
KafkaListener动态指定多个topic
springboot nacos配置详解
【无标题】在feign post中,如何发送 form-url-encoded 数据
2022年8篇
2021年34篇
2020年62篇
2019年98篇
2018年181篇
2017年411篇
2016年481篇
2015年38篇
2014年44篇
目录
目录
分类专栏
config
2篇
yapi
1篇
docker
9篇
argo
1篇
jenkins
4篇
Eureka
4篇
navicat
1篇
CDH
2篇
fastjson
2篇
sentinel
2篇
股票
1篇
weave
3篇
perf
1篇
gitlab
2篇
harbor
1篇
jpa
1篇
mapper
1篇
flume
1篇
fio
java
492篇
c++
25篇
python
9篇
J2EE
8篇
EJB
3篇
J2EE JNDI
7篇
教育
1篇
面试
139篇
XML
7篇
数据库
122篇
hibernate
16篇
spring
102篇
aspect
3篇
AOP
11篇
HTML
16篇
struts2
9篇
tomcat
22篇
设计模式
10篇
NIO
10篇
http
12篇
反射
2篇
eclipse
5篇
mysql
117篇
运维
6篇
分布式系统
10篇
MQ
5篇
hadoop
22篇
Linux
15篇
sip
3篇
NoSQL
35篇
common pool
1篇
架构与分布式系统
60篇
nginx
40篇
web service
14篇
Restful
13篇
thrift
1篇
JVM
21篇
并发
21篇
网络编程
28篇
网络安全
13篇
数据结构
20篇
maven
15篇
jquery
3篇
velocity
4篇
tbschedule
4篇
mybatis
12篇
ecache
1篇
redis
42篇
json
21篇
秒杀系统
9篇
分布式调度框架
15篇
zookeeper
12篇
kafka
44篇
druid
21篇
mongodb
10篇
dubbo
4篇
sharding-jdbc
RocketMQ
4篇
java并发
15篇
UML
1篇
算法
10篇
mycat
4篇
lintcode
4篇
springmvc
13篇
netflix
2篇
jsp
2篇
安全
1篇
angular
3篇
微服务
17篇
实时数据库
大数据
22篇
K8S
21篇
istio
6篇
swagger
1篇
devops
1篇
vmware
elasticsearch
4篇
storm
1篇
黑白子
1篇
区块链
1篇
sprint boot
11篇
aws
4篇
log
1篇
m2m
2篇
mqtt
4篇
杀毒
3篇
dos
1篇
spring cloud
8篇
session
1篇
sticky
1篇
认证
2篇
windows
1篇
工作流
1篇
jhispter
1篇
springboot
16篇
activiti
5篇
lombok
1篇
leetcode
7篇
火车票
1篇
Centos
2篇
缓存
4篇
maxwell
1篇
MDC
1篇
flink
3篇
mapreduce
3篇
idea
1篇
Cloudera
目录
评论
被折叠的 条评论
为什么被折叠?
到【灌水乐园】发言
查看更多评论
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。
余额充值