覆盖索引的正确字段顺序 - MySQL

时间:2011-01-26 00:07:52

标签: sql mysql indexing covering-index

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

2 个答案:

答案 0 :(得分:3)

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

col_a, col_b, col_c

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

col_c, col_b, col_a

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

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

  • 选择
  • WHERE
  • GROUP BY
  • HAVING
  • ORDER BY

参考:

答案 1 :(得分:1)

MySQL Optimization 7.5.2 Multiple-Column Indexes说:

  

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

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