当前位置:网站首页>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的执行过程
边栏推荐
- 05-ubuntu安装mysql8
- 分布式 | 如何与 DBLE 进行“秘密通话”
- ZUCC_编译语言原理与编译_实验03 编译器入门
- MATLAB Camera Calibrator相机标定
- 单目双视三维坐标确定
- Application of tidb in Netease games
- Synthesize video through ffmpeg according to m3u8 file of video on the network
- JUC personal simple notes
- The article takes you to understand the security of Windows operating system and protect your computer from infringement
- 普通token
猜你喜欢

2021-03-11 comp9021 class 8 notes

Question 3 - MessageBox pop-up box, modify the default background color

ZUCC_编译语言原理与编译_实验01 语言分析与简介

5 minutes, excellent customer service chat handling skills

权限模型 DAC ACL RBAC ABAC

New technology practice, encapsulating the permission application library step by step with the activity results API

jwt(json web token)

Markdown to realize text link jump

io模型初探

ZUCC_编译语言原理与编译_实验05 正则表达式、有限自动机、词法分析
随机推荐
js中通过key查找和更新对象中指定值的方法
leetcode 1642. Furthest Building You Can Reach(能到达的最远的建筑)
Small sample fault diagnosis - attention mechanism code - Implementation of bigru code parsing
JUC个人简单笔记
os. path. Pits encountered during the use of join()
Easydss anonymous live channel data volume instability optimization scheme sharing
Easynvr and easyrtc platforms use go language to manage projects. Summary of the use of govendor and gomod
One development skill a day: how to establish P2P communication based on webrtc?
【无标题】
App Startup
ZUCC_ Principles of compiling language and compilation_ Experiment 04 language and grammar
Glusterfs replacement failure brick
2022 tea artist (intermediate) work license question bank and online simulation examination
Several ways you can't move zero (sequel)
2021-06-24: find the length of the longest non repeating character substring in a string.
5 minutes, excellent customer service chat handling skills
2021-03-11 comp9021 class 8 notes
Battle history between redis and me under billion level traffic
[graduation season] Hello stranger, this is a pink letter
LabVIEW finds prime numbers in an array of n elements