辅助索引扫描如何在InnoDB中运行?

时间:2011-01-21 22:54:25

标签: mysql innodb

InnoDB有两种类型的索引:主要(聚集)和辅助(带有pimary索引键)。

当我输入查询时,扫描由二级索引索引的字段我的问题就开始了。 InnoDB是否会扫描二级索引并逐一检索到达到条件的记录? 如果我在二级索引中有50个点击率InnoDB寻求50倍的主要指数?

1 个答案:

答案 0 :(得分:13)

  

InnoDB是否会扫描二级索引并逐一检索到达到条件的记录?

如果选择二级索引未涵盖的列,则是,它应该从表中检索它们(聚簇索引)。

如果你有这个布局:

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

发生以下情况:

  1. 使用B-Tree seekInnoDB查找ca的索引中的第一条记录,其中包含$some_value

  2. 然后遍历索引,逐个记录,直到找到大于$some_value的第一条记录。

  3. 由于索引中只包含ca(键列)和id(行指针),因此InnoDB需要在cb中找到id的值表本身。

  4. 对于索引中的每条记录,它采用id的值并在表中搜索它。由于该表实际上是B-Tree上的聚簇索引,因此使用SELECT ca, id FROM a WHERE ca = $some_value 搜索。

  5. 但是,如果您有此查询:

    3

    ,然后可以直接从索引中检索所有内容,并且不会执行步骤4using index。它在查询计划中显示为{{1}}。

      

    如果我在二级索引中有50次点击,InnoDB会寻找50倍的主要指数吗?

    是(关于上述评论)