文章目录
前言
正确的创建合适的索引是提升数据库查询性能的基础。
叙述
放张思维导图,首先大概的了解一下Mysql索引。图片上放大看的更加清楚哦。
why
为什么用索引
- 索引能极大的减少存储引擎需要扫描的数据量
- 索引可以把随机IO变成顺序IO
- 索引可以帮助我们在进行分组、排序等操作时,避免使用临时表
mysql为什么选择B+ Tree
- B+树是B-树的变种(PLUS版)多路绝对平衡查找树,他拥有B-树的优势
- B+树扫库、表能力更强
- B+树的磁盘读写能力更强
- B+树的排序能力更强
- B+树的查询效率更加稳定
what
索引本质
索引是为了加速对表中数据行的检索而创建的一种分散存储的数据结构
索引原则
正确的创建合适的索引是提升数据库查询性能的基础
树类型VS
二叉查找树
平衡二叉查找树
特点:
它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。
原理图:
缺点:
- 太深了
- 数据处的(高)深度决定着他的1O操作次数,I0操作耗时大
- 太小了
- 每一个磁盘块(节点/页)保存的数据量太小了
- 没有很好的利用操作磁盘IO的数据交换特性
- 也没有利用好磁盘IO的预读能力(空间局部性原理),从而带来频繁的IO操作
多路平衡查找树(B-树)
特点:
- 结构为矮胖
- 磁盘级索引
- 按区间划分
- 路(分支,子节点)=关键字+1
原理图:
缺点:
每一个磁盘块中都存有数据。
加强版多路平衡查找树(B+树)
特点:
- 关键字搜索采用左闭区间
- 非叶节点不保存数据,保存关键字和引用
- 叶子节点保存关键字对应的数据
- 叶子节点是顺序排序的,相邻节点有顺序引用的关系
原理图:
B+TREE与B-TREE的区别:
- B+节点关键字搜索采用闭合区间
- B+非叶节点不保存数据相关信息,只保存关键字和子节点的引用
- B+关键字对应的数据保存在叶子节点中
- B+叶子节点是顺序排列的,并且相邻节点具有顺序引用的关系
how
Mysql B+Tree索引体现形式如下:
Myisam
原理图
特点
两个文件:MYI(索引),MYD(数据)
Innodb
原理图
特点
一个文件:IBD(数据)
where
最佳实践
列的离散性
- 特点
- 越大离散性越好
- 原理
- count(distinct col):count(col)
最左匹配原则
- 关键字是从左到右进行对比,不可跳过
联合索引
- 单列索引
- 节点中关键字[name]
- 联合索引
- 原理
- 节点中关键字[name,phoneNum]
- 原则
- 经常用的列优先【最左匹配原则】
- 选择性(离散度)高的列优先【离散度高原则】
- 宽度小的列优先【最少空间原则】
- 原理
覆盖索引
- 索引节点中的关键字直接返回查询列
小结
越来越优秀,加油。
感谢您的阅读~~