当前位置:网站首页>mysql组合索引的有序性
mysql组合索引的有序性
2022-06-24 07:03:00 【一个不靠谱的程序员】
昨天同事关于军规里的一条mysql索引的问题咨询我,才发现自己也不太了解组合索引的规则。于是来记录一下:
【推荐】如果有order by的场景,请注意利用索引的有序性。order by 最后的字段是组合索引的一部分,并且放在索引组合顺序的最后,避免出现file_sort的情况,影响查询性能。
正例:where a=? and b=? order by c; 索引:a_b_c
反例:索引中有范围查找,那么索引有序性无法利用,如:WHERE a>10 ORDER BY b; 索引a_b无法排序。
解释:order by的排序原理
1.利用索引的有序性获取有序数据
2.利用内存/磁盘文件排序获取结果
1) 双路排序:是首先根据相应的条件取出相应的排序字段和可以直接定位行数据的行指针信息,然后在sort buffer 中进行排序。
2)单路排序:是一次性取出满足条件行的所有字段,然后在sort buffer中进行排序。
组合索引的有序性和最左前缀原理
【强制】理解组合索引最左前缀原则,避免重复建设索引,如果建立了(a,b,c),相当于建立了(a), (a,b), (a,b,c)
假设有索引(A,B)
mysql创建组合索引的规则是首先会对复合索引的最左边的,也就是第一个A字段的数据进行排序,在第一个字段的排序基础上,然后再对后面第二个的B字段进行排序。其实就相当于实现了类似 order by A B这样一种排序规则。
第一个A字段是绝对有序的,而第二字段就是无序的了。所以通常情况下,直接使用第二个B字段进行条件判断是用不到索引的
那么什么时候才能用到呢?
当然是B字段的索引数据也是有序的情况下才能使用。
什么时候才是有序的呢?
只有在A字段是等值匹配的情况下,B才是有序的。
组合索引查询的各种场景
有 Index (A,B,C) ——组合索引多字段是有序的,并且是个完整的BTree 索引。
下面条件可以用上该组合索引查询:
A>5
A=5 AND B>6
A=5 AND B=6 AND C=7
A=5 AND B IN (2,3) AND C>5
下面条件将不能用上组合索引查询:
B>5 ——查询条件不包含组合索引首列字段
B=6 AND C=7 ——查询条件不包含组合索引首列字段
下面条件将能用上部分组合索引查询:
A>5 AND B=2 ——当范围查询使用第一列,查询条件仅仅能使用第一列
A=5 AND B>6 AND C=2 ——范围查询使用第二列,查询条件仅仅能使用前二列
组合索引排序的各种场景
有组合索引 Index(A,B)。
下面条件可以用上组合索引排序:
ORDER BY A——首列排序
A=5 ORDER BY B——第一列过滤后第二列排序
ORDER BY A DESC, B DESC——注意,此时两列以相同顺序排序
A>5 ORDER BY A——数据检索和排序都在第一列
下面条件不能用上组合索引排序:
ORDER BY B ——排序在索引的第二列
A>5 ORDER BY B ——范围查询在第一列,排序在第二列
A IN(1,2) ORDER BY B ——理由同上
ORDER BY A ASC, B DESC ——注意,此时两列以不同顺序排序
建议
如果对有没有用上索引有疑惑可以写完sql以后 用explain 来运行一下sql
可以更有利于理解sql的执行过程
边栏推荐
- Shell pass parameters
- Longhorn installation and use
- Shell basic operator -- arithmetic operator
- The article takes you to understand the security of Windows operating system and protect your computer from infringement
- Ordinary token
- 将mysql的数据库导出xxx.sql,将xxx.sql文件导入到服务器的mysql中。项目部署。
- How to mount a USB hard disk with NTFS file format under RHEL5 system
- LabVIEW finds prime numbers in an array of n elements
- orb slam build bug: undefined reference to symbol ‘_ZN5boost6system15system_categoryEv‘
- A preliminary study of IO model
猜你喜欢

【关于运维和网工的差别,一文说透】

日本大阪大学万伟伟研究员介绍基于WRS系统机器人的快速集成方法和应用

2021-03-16 comp9021 class 9 notes

5分钟,客服聊天处理技巧,炉火纯青

Maya re deployment

RCNN、Fast-RCNN、Faster-RCNN介绍

Vscode install the remote -wsl plug-in to connect to the local WSL

jwt(json web token)

ZUCC_ Principles of compiling language and compilation_ Experiment 04 language and grammar

Markdown to realize text link jump
随机推荐
Shell basic operators -- relational operators
ZUCC_编译语言原理与编译_实验08 语法分析 LR 分析
After interviewing and tutoring several children, I found some problems!
jwt(json web token)
新技术实战,一步步用Activity Results API封装权限申请库
Paper notes: multi label learning dm2l
ZUCC_ Principles of compiling language and compilation_ Experiment 01 language analysis and introduction
Shell pass parameters
Building a static website with eleventy
AUTO PWN
Which is the first poem of Tang Dynasty?
Matlab求解线性方程组Ax=b
OpenCV to realize the basic transformation of image
MATLAB Camera Calibrator相机标定
Markdown 实现文内链接跳转
[explain the difference between operation and maintenance and network engineering]
pyQt 常用系统的事件
Permission model DAC ACL RBAC ABAC
487. number of maximum consecutive 1 II ●●
Qt源码分析--QObject(2)