首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >辅助索引扫描在InnoDB中是如何工作的?

辅助索引扫描在InnoDB中是如何工作的?
EN

Stack Overflow用户
提问于 2011-01-22 06:54:25
回答 1查看 1.7K关注 0票数 4

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

当我输入query,即由二级索引索引的扫描字段时,我的问题就开始了。InnoDB是否扫描二级索引并逐个检索命中条件记录?如果我在辅助索引InnoDB中有50个命中率是主索引的50倍?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-01-22 06:59:05

是InnoDB扫描二级索引并逐条检索命中条件的记录吗?

如果选择辅助索引未涵盖的列,则为yes,它应从表(聚集索引)中检索这些列。

如果你有这样的布局:

代码语言:javascript
复制
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在包含$some_value
  2. It的ca上找到索引中的第一条记录,然后逐条遍历索引,获取记录,直到找到第一条大于$some_value.
  3. Since的记录。只有ca (键列)和id (行指针)包含在索引中,InnoDB需要在表本身中查找cb的值。
  4. 对于索引中的每条记录,它获取id的值,并在表中搜索表中的值。由于该表实际上是id上的聚集索引,因此使用了B-Tree search。

但是,如果您有以下查询:

代码语言:javascript
复制
SELECT  ca, id
FROM    a
WHERE   ca = $some_value

,则可以直接从索引中检索所有内容,并且不执行步骤34。它在查询计划中显示为using index

如果我在辅助索引InnoDB中有50个命中,是主索引的50倍吗?

是(关于上面的评论)

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4764693

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档