深入剖析MySQL索引数据结构
更新时间:2021-10-13 15:28:52 作者:老郑
什么是索引? 索引是一种有序的数据结构,可以帮助我们快速查找数据。 下面这篇文章主要介绍MySQL索引数据结构的相关信息。 需要的朋友可以参考以下
目录索引参考
概述
索引是一种对数据库表中一个或多个列的值进行排序的结构,利用索引可以快速访问数据库表中的特定信息。
索引数据结构
二叉树
二叉树(tree)是指节点度数不大于2的有序树,是最简单也是最重要的树。二叉树的递归定义是:二叉树是一棵空树,或者说非由一个根节点和两个不相交的左右子树组成的空树,称为根; 左子树和右子树也是二叉树
对于数组{1,2,3,4,5}数据结构将变成一个链表
特征:
二叉树.png
红黑树
红黑树是一种特殊类型的二叉树,是计算机科学中用于组织数据块(例如数字)的一种结构。 如果二叉搜索树是红黑树,则它的任何子树都必须是红黑树。
红黑树是平衡二叉搜索树的变体。 它的左右子树的高度差可能大于1,所以红黑树不是严格意义上的平衡二叉树(AVL),但是平衡它的代价比较低。 低,其平均统计性能强于AVL。
由于每棵红黑树都是一棵二叉排序树,所以在搜索红黑树时,可以使用普通二叉排序树的搜索算法,搜索过程中不需要颜色信息。
红黑树数据结构如下:
红黑树数据结构.png
特征:
B树
B树数据结构.png
B+树
B+树数据结构.png
特征关键字:节点内有序、叶节点指针链接、非叶节点存储索引(冗余)
查询mysql索引的数据页大小:
mysql> show global status like 'Innodb_page_size'; +------------------+-------+ | Variable_name | Value | +------------------+-------+ | Innodb_page_size | 16384 | +------------------+-------+
为什么要设置16kb?
散列
哈希数据结构.png
指数
索引具体化(聚合)
表数据文件本身是B+Tree组织的索引结构文件
聚簇索引——叶节点包含完整的数据记录
为什么一张表一定要有主键,推荐使用整型自增主键?
为什么非主键索引结构的叶子节点存放的是主键值?
主键索引示意图:
索引实现.png
非主键索引示意图
如果查询是通过name=Alice来查询:
使用非主键索引进行查询,查询后得到信息(Alice, 18)。 其实这里也是非聚集索引再查询回表,然后通过主键查询来做回表查询。
两个数据文件:
.frm主要存放表结构信息
.ibd主要存放索引和数据
索引文件(非集群)
索引文件和数据文件是分开的(非聚集)
存储引擎索引.png
三个数据文件:
.frm 数据结构文件
.myd文件主要是存放数据
.myi文件主要存放索引信息
聚簇索引和非聚簇索引
特征:
聚合/不聚合主要是索引文件是否和数据文件在一起。
在查询效率上,聚簇索引不会更高效地跨文件查询。
联合/复合索引
多个字段组织成一个公共索引
复合索引.png
为什么要这样使用最左前缀原则呢?
索引数据已排序,如果跳过字段则无法使用。
例子:
where name = 'Jeff' and age = 22 -- 命中索引 where age = 30 and postatin='manager' -- 不命中索引 where postation = 'dev' -- 不命中索引
参考
百度百科
总结
关于MySQL索引数据结构的这篇文章到此结束。 更多关于MySQL索引数据结构的内容,请搜索脚本之家以往文章或继续浏览以下相关文章。 希望大家以后多多支持脚本之家!