如我们所知,innodb在它的二级索引中只存储主键值,这意味着我们需要再次遍历聚集索引B+树来获取行记录。为什么不把行指针存储在二级索引中以减少额外的查找工作呢?
slmsl1lt1#
没有“行指针”。PRMARY KEY的列提供了在数据的BTree中定位行的功能。当然,通过PK查找可以说比“行指针”慢。但是更新,删除,块分割等都是自动处理的。(参见Bill的评论。)这使代码更简单。而且,在某些情况下,更快。更快的一个小例子:鉴于
PRMARY KEY
PRIMARY KEY(id), INDEX(foo) -- effectively (foo, id), as discussed above SELECT id FROM tbl WHERE foo = 123;
在本例中,索引的BTree具有完整答案;不需要进入数据的BTree。因此,这个索引被称为“覆盖”这个SELECT。
SELECT
1条答案
按热度按时间slmsl1lt1#
没有“行指针”。
PRMARY KEY
的列提供了在数据的BTree中定位行的功能。当然,通过PK查找可以说比“行指针”慢。但是更新,删除,块分割等都是自动处理的。(参见Bill的评论。)这使代码更简单。而且,在某些情况下,更快。
更快的一个小例子:鉴于
在本例中,索引的BTree具有完整答案;不需要进入数据的BTree。因此,这个索引被称为“覆盖”这个
SELECT
。