InnoDB有两种类型的索引:主索引(聚集索引)和辅助索引(具有pimary索引键)。
当我输入query,即由二级索引索引的扫描字段时,我的问题就开始了。InnoDB是否扫描二级索引并逐个检索命中条件记录?如果我在辅助索引InnoDB中有50个命中率是主索引的50倍?
发布于 2011-01-22 06:59:05
是InnoDB扫描二级索引并逐条检索命中条件的记录吗?
如果选择辅助索引未涵盖的列,则为yes,它应从表(聚集索引)中检索这些列。
如果你有这样的布局:
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在包含$some_valueca上找到索引中的第一条记录,然后逐条遍历索引,获取记录,直到找到第一条大于$some_value.ca (键列)和id (行指针)包含在索引中,InnoDB需要在表本身中查找cb的值。id的值,并在表中搜索表中的值。由于该表实际上是id上的聚集索引,因此使用了B-Tree search。但是,如果您有以下查询:
SELECT ca, id
FROM a
WHERE ca = $some_value,则可以直接从索引中检索所有内容,并且不执行步骤3和4。它在查询计划中显示为using index。
如果我在辅助索引InnoDB中有50个命中,是主索引的50倍吗?
是(关于上面的评论)
https://stackoverflow.com/questions/4764693
复制相似问题