2

是否有为 MySQL 中的表创建覆盖索引的标准顺序?这意味着如果我的查询具有 where 子句、order by 和 select 语句中的字段,我将按什么顺序将字段添加到索引以正确创建覆盖索引?

4

2 回答 2

3

覆盖索引采用逗号分隔列表中的列列表。从左侧开始遍历/查看此列表。如果不使用最左边的列,则不使用索引。意思是,有一个列列表,如:

col_a, col_b, col_c

如果查询不包含对 的引用col_a,则不会使用它。如果订单更改为:

col_c, col_b, col_a

...然后col_c需要在查询中引用。继续使用第二个覆盖索引列示例,col_b或者col_a不必在查询中但评估从左到右逐列移动。

索引使用的列引用可以在以下子句中:

  • 选择
  • 在哪里
  • 通过...分组
  • 拥有
  • 订购方式

参考:

于 2011-01-26T00:20:03.147 回答
1

MySQL 优化 7.5.2 多列索引说:

MySQL 使用多列索引的方式是,当您在 WHERE 子句中为索引的第一列指定已知数量时,即使您没有为其他列指定值,查询也会很快。

链接页面上的示例还指出,如果您没有为索引中的第一列指定值,则不使用索引。

于 2011-01-26T00:20:09.970 回答