gpt4 book ai didi

mysql - 二级索引扫描在 InnoDB 中是如何工作的?

转载 作者:可可西里 更新时间:2023-11-01 07:14:00 25 4
gpt4 key购买 nike

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

当我输入扫描由二级索引索引的字段的查询时,我的问题就开始了。InnoDB是否扫描二级索引并逐条检索符合条件的记录?如果我在二级索引中有 50 次命中 InnoDB 寻求 50 次主索引?

最佳答案

Is InnoDB scan secondary index and retrive one by one records that hit condition?

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

如果你有这样的布局:

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 seekInnoDBca 的索引中找到第一条记录,其中包含 $一些_值

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

  3. 由于索引中只有ca(键列)和id(行指针),所以InnoDB需要找到表本身中 cb 的值。

  4. 对于索引中的每条记录,它采用 id 的值并在表中搜索它。由于该表实际上是 id 上的聚集索引,因此为此使用了 B-Tree 搜索。

但是,如果您有这样的查询:

SELECT  ca, id
FROM a
WHERE ca = $some_value

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

If I have 50 hits in secondary index InnoDB seek 50 times primary index?

是的(关于上面的评论)

关于mysql - 二级索引扫描在 InnoDB 中是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4764693/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com