为什么 innodb 不在辅助/非聚集索引中存储行指针?
P粉038161873
P粉038161873 2023-09-11 17:28:42
0
1
594

众所周知,innodb在辅助索引中只存储主键值,这意味着我们需要再次遍历聚集索引B+树来获取行记录。

为什么不直接将行指针存储在二级索引中以减少额外的查找工作?

P粉038161873
P粉038161873

全部回复(1)
P粉469090753

没有“行指针”。 PRMARY KEY 的列具有在数据的 BTree 中定位行的功能。

当然,通过 PK 查找可以说比“行指针”慢。但更新、删除、块分割等都会自动处理。 (参见 Bill 的评论。)这使代码更加简单。而且,在某些情况下,速度更快。

更快的简单示例:Given

PRIMARY KEY(id),
INDEX(foo)   -- effectively (foo, id), as discussed above

SELECT id FROM tbl WHERE foo = 123;

在这个例子中,索引的BTree有完整的答案;无需访问数据的 BTree。因此,该索引被称为此 SELECT 的“覆盖”。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板