是否有标准订单为MySQL中的表创建覆盖索引?这意味着如果我的查询具有where子句,order by和select语句中的字段,我将以什么顺序将索引的字段正确创建覆盖索引?
答案 0 :(得分:3)
覆盖索引采用逗号分隔列表中的列列表。从左侧开始遍历/审查此列表。如果未使用最左侧的列,则不使用索引。意思是,列表如:
col_a, col_b, col_c
如果查询不包含对col_a
的引用,则不会使用它。如果订单更改为:
col_c, col_b, col_a
...然后需要在查询中引用col_c
。继续使用第二个覆盖索引列示例,col_b
或col_a
不必在查询中,但评估从左到右逐列移动。
索引使用的列引用可以在以下子句中:
参考:
答案 1 :(得分:1)
MySQL Optimization 7.5.2 Multiple-Column Indexes说:
MySQL使用多列索引,以便在WHERE子句中为索引的第一列指定已知数量时查询很快,即使您没有为其他列指定值。
如果没有为索引中的第一列指定值,链接页面上的示例还会指出索引未使用。