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

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

1.索引是什么?

索引是为了加速对表中数据行的检索而创建的一种分散存储的数据结构。
在这里插入图片描述

2.为什么?

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

3.索引原理

B+ tree

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

B 树
在这里插入图片描述特点:
每个节点上可以有多个关键字,每个节点都存储着关键字对应的数据。
子节点不存储父节点的关键字

B+ 树
在这里插入图片描述
B+树与B 树区别:
1,B+节点关键字搜索采用闭合区间
2,B+非叶节点不保存数据相关信息,只保存关键字和子节点的引用
3,B+关键字对应的数据保存在叶子节点中
4,B+叶子节点是顺序排列的,并且相邻节点具有顺序引用的关系

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

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

Myisam
在这里插入图片描述
在这里插入图片描述
InnoDB
主键索引属于聚集索引
在这里插入图片描述
在这里插入图片描述

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

发布了220 篇原创文章 · 获赞 89 · 访问量 19万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览