【mysql】索引存储结构B+树

参考:

https://zhuanlan.zhihu.com/p/545113372

https://www.bilibili.com/read/cv18157852


Mysql数据库引擎默认使用InnoDB,使用B+树数据结构。

一个表只能有一个聚簇索引,但可以有多个非聚簇索引,也就是多个索引目录提供数据检索。


1.主键索引:基于主键创建B+树索引结构。

B+树的所有数据都存储在叶子节点中,非叶子节点只存储键值信息,所有叶子节点间都有一个链指针来排序。

通过索引查询数据的时间复杂度为O(log n)。


2.二级索引(非主键索引)

主键索引和所有的二级索引都维护各自的 B+ 树结构,但是有个不同的地方在于,二级索引的叶子节点存储的不是数据,而是主键索引对应的主键值。

那么对于二级索引查找一条数据索要做的操作就是:

  1. 首先在二级索引中找到叶子节点对应的数据主键值;
  2. 根据这个主键值去聚集索引中找到真正对应的数据行。

所以需要两次 B+ Tree 查找。



另外:

SELECT * FROM event WHERE old IN (1,2,3)

IN()函数实际上是多个等值条件查询

参考:书《高性能MySQL》

posted @ 2023-07-04 22:15  musecho  阅读(96)  评论(0编辑  收藏  举报