在InnoDB存储引擎中,确实使用了B+树结构来组织数据和索引,但是InnoDB采用了一种特殊的方式来结合数据和索引,这种结构被称为聚集索引(Clustered Index)。
在InnoDB中,主键索引就是聚集索引。每张表的数据行实际上都存储在主键索引的叶子节点上。这意味着数据和主键索引是物理上紧密相连的,它们实际上是存储在同一颗B+树上的。当你按照主键查询数据时,你实际上就是在遍历这个B+树。
非主键索引(Secondary Indexes),也被称作辅助索引,它们同样使用B+树结构,但与聚集索引不同,非主键索引的叶子节点不存储完整的行数据,而是存储主键值以及指向实际数据行的指针。当使用非主键索引进行查询时,InnoDB首先会查找非主键索引树,找到对应的主键值,然后再通过这个主键值去聚集索引中获取完整的行数据,这一过程被称为回表(Index Lookup)。
这样的设计有以下优点:
- 减少了磁盘I/O次数,因为主键索引包含了实际的数据。
- 对于范围查询和排序查询,B+树结构可以有效地利用顺序访问的特点,提高查询效率。
- 数据和索引的紧密结合有助于提高数据局部性,优化缓存性能。
然而,这也意味着修改主键(例如增加或者删除列)可能是一个昂贵的操作,因为这将涉及到整个B+树的重构。同时,如果主键不是自然增长的,比如使用UUID作为主键,那么可能导致B+树的碎片化,影响性能。
标签:辅助,树结构,聚簇,索引,InnoDB,键值,数据,主键 From: https://blog.csdn.net/weixin_43803780/article/details/140450889