首页  >  问答  >  正文

为什么 innodb 不在辅助/非聚集索引中存储行指针?

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

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

P粉038161873P粉038161873404 天前554

全部回复(1)我来回复

  • P粉469090753

    P粉4690907532023-09-12 16:06:28

    没有“行指针”。 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 的“覆盖”。

    回复
    0
  • 取消回复