【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+ 树结构,但是有个不同的地方在于,二级索引的叶子节点存储的不是数据,而是主键索引对应的主键值。
那么对于二级索引查找一条数据索要做的操作就是:
- 首先在二级索引中找到叶子节点对应的数据主键值;
- 根据这个主键值去聚集索引中找到真正对应的数据行。
所以需要两次 B+ Tree 查找。
另外:
SELECT * FROM event WHERE old IN (1,2,3)
IN()函数实际上是多个等值条件查询
参考:书《高性能MySQL》