mysql 为什么innodb不在二级/非聚集索引中存储行指针?

mdfafbf1  于 2023-04-05  发布在  Mysql
关注(0)|答案(1)|浏览(146)

如我们所知,innodb在它的二级索引中只存储主键值,这意味着我们需要再次遍历聚集索引B+树来获取行记录。
为什么不把行指针存储在二级索引中以减少额外的查找工作呢?

slmsl1lt

slmsl1lt1#

没有“行指针”。PRMARY KEY的列提供了在数据的BTree中定位行的功能。
当然,通过PK查找可以说比“行指针”慢。但是更新,删除,块分割等都是自动处理的。(参见Bill的评论。)这使代码更简单。而且,在某些情况下,更快。
更快的一个小例子:鉴于

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

SELECT id FROM tbl WHERE foo = 123;

在本例中,索引的BTree具有完整答案;不需要进入数据的BTree。因此,这个索引被称为“覆盖”这个SELECT

相关问题