2011-01-26 40 views
2

是否有一个标准的订单来为MySQL中的表创建一个覆盖索引?这意味着如果我的查询具有where子句,order by和select语句中的字段,按照什么顺序将索引字段设置为正确创建覆盖索引?涵盖索引的正确的现场订单 - MySQL

回答

3

覆盖索引采用逗号分隔列表中的列表列表。该列表从左侧开始遍历/检查。如果最左侧的列未被使用,则不使用索引。这意味着,具有列名单,如:

col_a, col_b, col_c 

如果查询不包含col_a一个参考,它不会被使用。如果订单改为:

col_c, col_b, col_a 

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

为索引使用列引用可以是在以下章节:

  • SELECT
  • WHERE
  • GROUP BY
  • HAVING
  • ORDER BY

参考:

+0

因此,如果我有一个where子句,然后添加索引where子句中的字段,然后在select语句中的所有字段? – John 2011-01-26 00:45:43

1

MySQL Optimization 7.5.2 Multiple-Column Indexes说:

MySQL在这样一种方式,查询速度快多列索引,当你在一个WHERE指定索引的第一列中的已知量子句,即使您没有为其他列指定值。

链接页面上的例子还指出,该指数是不使用,如果你不为索引中的第一列指定值。