InnoDB有两种类型的索引:主要(群集)和辅助(带有pimary索引键).
当我键入查询,扫描由二级索引索引的字段时,我的问题就开始了.InnoDB是否会扫描二级索引并逐一检索到达到条件的记录?如果我在二级索引中有50个点击率InnoDB寻求50倍主要指数?
Qua*_*noi 12
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
Run Code Online (Sandbox Code Playgroud)
发生以下情况:
使用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
Run Code Online (Sandbox Code Playgroud)
,然后一切都可以从一索引检索,并且步骤3和4不执行.它在查询计划中显示为using index.
如果我在二级索引中有50个点击率InnoDB寻求50倍主要指数?
是(关于上述评论)
| 归档时间: |
|
| 查看次数: |
1473 次 |
| 最近记录: |