InnoDB 有两种类型的索引:主索引(集群)和二级索引(带有主索引键)。
当我键入查询以扫描由二级索引索引的字段时,我的问题就开始了。
InnoDB 是否扫描二级索引并一一检索符合条件的记录?
如果我在二级索引中有 50 次点击 InnoDB 寻求 50 次主索引?
最佳答案
如果您选择二级索引未涵盖的列,那么是的,它应该从表(聚集索引)中检索它们。
如果你有这个布局:
CREATE TABLE a (id INT NOT NULL PRIMARY KEY, ca INT NOT NULL, cb INT NOT NULL, KEY(ca))
SELECT cb
FROM a
WHERE ca = $some_value
发生以下情况:
B-Tree seek
,InnoDB
在 ca
的索引中找到第一条记录,该记录包含 $some_value
$some_value
的第一条记录。 ca
(键列)和id
(行指针),所以InnoDB
需要在表本身中找到cb
的值。 id
的值并在表中搜索它。由于该表实际上是 id
上的聚集索引,因此使用 B-Tree
搜索。 但是,如果您有此查询:
SELECT ca, id
FROM a
WHERE ca = $some_value
,那么一切都可以直接从索引中检索出来,并且不执行
3
和 4
步骤。它在查询计划中显示为 using index
。是(关于上面的评论)
关于mysql - InnoDB 中的二级索引扫描是如何工作的?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4764693/