【发布时间】:2011-01-26 00:07:52
【问题描述】:
在 MySQL 中为表创建覆盖索引是否有标准顺序?这意味着如果我的查询具有 where 子句、order by 和 select 语句中的字段,我将按什么顺序将字段添加到索引中以正确创建覆盖索引?
【问题讨论】:
标签: sql mysql indexing covering-index
在 MySQL 中为表创建覆盖索引是否有标准顺序?这意味着如果我的查询具有 where 子句、order by 和 select 语句中的字段,我将按什么顺序将字段添加到索引中以正确创建覆盖索引?
【问题讨论】:
标签: sql mysql indexing covering-index
覆盖索引采用逗号分隔列表中的列列表。从左侧开始遍历/查看此列表。如果不使用最左边的列,则不使用索引。意思是,有一个像这样的列列表:
col_a, col_b, col_c
如果查询不包含对col_a 的引用,则不会使用它。如果顺序改为:
col_c, col_b, col_a
...那么col_c 需要在查询中引用。继续使用第二个覆盖索引列示例,col_b 或 col_a 不必在查询中,但评估从左到右逐列移动。
索引使用的列引用可以在以下子句中:
参考:
【讨论】:
MySQL Optimization 7.5.2 Multiple-Column Indexes 说:
MySQL 使用多列索引的方式是,当您在 WHERE 子句中为索引的第一列指定已知数量时,即使您没有为其他列指定值,查询也会很快。
链接页面上的示例还指出,如果您没有为索引中的第一列指定值,则索引未使用。
【讨论】: