怎么使用MySQL的覆盖索引

  介绍

这篇文章给大家分享的是有关怎么使用MySQL的覆盖索引的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

什么是覆盖索引

创建一个索引,该索引包含查询中用到的所有字段,称为“覆盖索引”。

使用覆盖索引,MySQL只需要通过索引就可以查找和返回查询所需要的数据,而不必在使用索引处理数据之后再进行回表操作。

覆盖索引可以一次性完成查询工作,有效减少IO,提高查询效率。

使用示例

查询语句:

SELECT  col2,, col3 得到test_table  WHERE  col1 =, xxx  ORDER  BY  col2;

创建一个单列索引:

ALTER  TABLE “test_table”, ADD  INDEX “idx_col1”(“col1”), USING  BTREE;

分析查询:

EXPLAIN  SELECT  SQL_NO_CACHE  col2,, col3 得到test_table  WHERE  col1 =, xxx  ORDER  BY  col2;

结果:对col1建立索引后,类型为ref,使用到了idx_col1索引。

修改索引,根据查询语句,建立一个联合索引:

ALTER  TABLE “test_table”, DROP  INDEX “idx_col1”;   ALTER  TABLE “test_table”, ADD  INDEX ‘idx_col1_col2_col3’(‘col1’,‘col2’,‘col3’), USING  BTREE;

分析查询:

EXPLAIN  SELECT  SQL_NO_CACHE  col2,, col3 得到test_table  WHERE  col1 =, xxx  ORDER  BY  col2;

结果:建立联合索引后,类型为ref,使用了idx_col1_col2_col3索引,额外为使用索引,说明使用了覆盖索引。

mysql覆盖索引和联合索引的区别

覆盖索引之是查询的列可刀以直接通过索引专提取,比如只查询主键蜀的列!或者查询联合索引的所有列或者左边开始的部分列(注意有顺序的)。

而联合索引并不一定只从索引中能获取到所有的数据,这个取决于你所查询的列,比如select *从表××××××;的方式就不太可能是覆盖索引。因此如果你查询的列能用到联合索引,且你查询的列都能通过联合索引获取,比如你只查询联合索引所在的列或者左边开始的部分列,这就相当于覆盖索引了。通常为了让查询能用到覆盖索引,就将要查询的多列数据设置成联合索引。

感谢各位的阅读!关于“怎么使用mysql的覆盖索引”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

怎么使用MySQL的覆盖索引