MYSQL索引数据结构

2019-11-28  本文已影响0人  陪安东尼的漫长岁月

数据库为何要使用索引?

磁盘IO.png

索引是什么?

索引的数据结构,优劣势对比

二叉树

二叉排序树.png

HASH
通过算法,将索引和磁盘的地址进行关联,查找某一行数据便只需要进行一次IO即可。HASH索引无法实现范围查找,但是匹配具体条件查询的话效率还是比较高的
BTREE

B-TREE.png
B+TREE.png

MYSQL的B+TREE

MYSQL B+TREE索引结构.png

在B+Tree的每个叶子节点增加一个指向相邻叶子节点的指针,就形成了带有顺序访问指针的B+Tree。这样就提高了区间访问性能:如果要查询key为从18到49的所有数据记录,当找到18后,只需顺着节点和指针顺序遍历就可以一次性访问到所有数据节点,极大提到了区间查询效率(无需返回上层父节点重复遍历查找减少IO操作)。

MYSQL索引底层数据结构分析

MyISAM引擎
非聚簇索引:myi索引文件和myd数据文件分离,索引文件仅保存数据记录的指针地址。叶子节点data域存储指向数据记录的指针地址。(底层存储文件: frm -表定义、 myi -myisam索引、 myd-myisam数据)。可以看到表定义文件,索引文件,数据文件是分开的
MyISAM引擎的表,索引可以缓存到内存中。

MyISAM引擎索引.png

InnoDB引擎
聚簇索引:数据&索引文件为一个idb文件,表数据文件本身就是主索引,相邻的索引临近存储(数据一定也是相邻地存放在磁盘上)。 叶节点data域保存了完整的数据记录(数据[除主键id外其他列data]+主索引[索引key:表主键id])。 (底层存储结构: frm -表定义、 ibd: innoDB数据&索引文件)。聚簇索引的索引和数据是一个文件。

主键索引 & 辅助索引.png
上一篇 下一篇

猜你喜欢

热点阅读