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

覆盖索引的正确字段顺序-MySQL,sql,mysql,indexing,covering-index,Sql,Mysql,Indexing,Covering Index,在MySQL中为表创建覆盖索引是否有标准顺序?也就是说,如果我的查询包含where子句、order by和select语句中的字段,那么我将以什么顺序将字段添加到索引中以正确创建覆盖索引?覆盖索引采用逗号分隔列表中的列列表。此列表从左侧开始遍历/审阅。如果不使用最左边的列,则不使用索引。意思是,有一个列列表,如: col_a, col_b, col_c 如果查询不包含对列a的引用,则不会使用该查询。如果订单更改为: col_c, col_b, col_a …然后需要在查询中引用col_c。继

在MySQL中为表创建覆盖索引是否有标准顺序?也就是说,如果我的查询包含where子句、order by和select语句中的字段,那么我将以什么顺序将字段添加到索引中以正确创建覆盖索引?

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

col_a, col_b, col_c
如果查询不包含对
列a
的引用,则不会使用该查询。如果订单更改为:

col_c, col_b, col_a
…然后需要在查询中引用
col_c
。继续使用第二个覆盖索引列示例,
col_b
col_a
不必位于查询中,但求值将按列从左向右移动

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

  • 挑选
  • 在哪里
  • 分组
  • 拥有
  • 订购人
参考:

    • 说:

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


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

      因此,如果我有where子句,则在索引中的where子句中添加字段,然后在select语句中添加所有字段?@John:列引用可以跨越我提到的任何子句。也就是说,索引的存在并不能保证它会被使用——表统计在索引选择中起着作用。