【数据库】数据库索引原理

正确的创建合适的索引 是提升数据库查询性能的基础

文章目录

      • 1.索引是什么?
      • 2.为什么?
      • 3.索引原理
        • B+ tree
      • 4.B+ tree 在两大引擎中的体现
      • 5.索引的原则

1.索引是什么?

索引是为了加速对表中数据行的检索而创建的一种分散存储的数据结构。
【数据库】数据库索引原理_第1张图片

2.为什么?

索引能极大的减少存储引擎需要扫描的数据量
索引可以把随机IO变成顺序IO
索引可以帮助我们在进行分组、排序等操作时,避免使 用临时表

3.索引原理

B+ tree

为什么用B+ tree? 而不用二叉树,平衡树
二叉树
【数据库】数据库索引原理_第2张图片
平横树图
【数据库】数据库索引原理_第3张图片
它太深了
数据处的(高)深度决定着他的IO操作次数,IO操作耗时大
它太小了 每一个磁盘块(节点/页)保存的数据量太小了,没有很好的利用操作磁盘IO的数据交换特性,也没有利用好磁盘IO的预读能力(空间局部性原理),从而带来频繁的IO操作。磁盘IO操作是以页为单位,每一页可以存储4kB的数据。

B 树
【数据库】数据库索引原理_第4张图片特点:
每个节点上可以有多个关键字,每个节点都存储着关键字对应的数据。
子节点不存储父节点的关键字

B+ 树
【数据库】数据库索引原理_第5张图片
B+树与B 树区别:
1,B+节点关键字搜索采用闭合区间
2,B+非叶节点不保存数据相关信息,只保存关键字和子节点的引用
3,B+关键字对应的数据保存在叶子节点中
4,B+叶子节点是顺序排列的,并且相邻节点具有顺序引用的关系

B+树是B-树的变种(PLUS版)多路绝对平衡查找树,他拥有B-树的优势
B+树扫库、表能力更强
B+树的磁盘读写能力更强
B+树的排序能力更强
B+树的查询效率更加稳定

4.B+ tree 在两大引擎中的体现

Myisam
【数据库】数据库索引原理_第6张图片
【数据库】数据库索引原理_第7张图片
InnoDB
主键索引属于聚集索引
【数据库】数据库索引原理_第8张图片
【数据库】数据库索引原理_第9张图片

5.索引的原则

5.1 离散性越高越好
5.2 最左匹配原则
对索引中关键字进行计算(对比),一定是从左往右依次进行,且不可跳过
5.3 索引列的数据长度能少则少
5.4 匹配列前缀可用到索引 like %9999%、like %9999用不到索引;
5.5 Where 条件中 not in 和 <>操作无法使用索引
5.6 多用指定列查询,只返回自己想到的数据列,少用select *,这样有可能用到覆盖索引;
5.7 索引上不加计算

联合索引:
联合索引列选择原则
1,经常用的列优先 【最左匹配原则】
2,选择性(离散度)高的列优先【离散度高原则】
3,宽度小的列优先【最少空间原则】
联合索引中如果不是按照索引最左列开始查找,无法使用索引;
联合索引中精确匹配最左前列并范围匹配另外一列可以用到索引;
联合索引中如果查询中有某个列的范围查询,则其右边的所有列都无法使用索引;

参考文章:
https://www.zhihu.com/question/36996520

你可能感兴趣的:(【数据库】)