linode 代购-美国主机代购-MySQL覆盖索引的使用示例

假如一个索引包括(或掩盖)一切需求查询的字段的值,称为‘掩盖索引’。这篇文章主要给我们介绍了关于MySQL掩盖索引的相关材料,需求的朋友能够参考下

什么是掩盖索引

linode 代购创立一个索引,该索引包括查询中用到的一切字段,称为“掩盖索引”。

运用掩盖索引,MySQL 只需求经过索引就能够查找和回来查询所需求的数据,而不必在运用索引处理数据之后再进行回表操作。

掩盖索引能够一次性完结查询作业,有效削减IO,提高查询功率。

运用示例

查询语句:

SELECT col2, col3 FROM 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 FROM test_table WHERE col1 = xxx ORDER BY col2;

成果:对 col1 树立索引后,type 为 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 FROM test_table WHERE col1 = xxx ORDER BY col2;

成果:美国主机代购树立联合索引后,type 为 ref,运用了 idx_col1_col2_col3 索引,Extra 为 Using index,阐明运用了掩盖索引。

mysql掩盖索引和联合索引的差异

掩盖索引zhi是查询的列可dao以直接经过索引zhuan提取,比如只查询主键shu的列!或许查询联合索引的一切列或许左面开端的部分列(留意有顺序的)!

而联合索引并不一定只从索引中能获取到一切的数据,这个取决于你所查询的列。比如select * from table where ××××××;的方式就不太可能是掩盖索引。因而假如你查询的列能用到联合索引,且你查询的列都能经过联合索引获取,比如你只查询联合索引所在的列或许左面开端的部分列,这就相当于掩盖索引了。一般为了让查询能用到掩盖索引,就将要查询的多列数据设置成联合索引。

总结

到此这篇关于MySQL掩盖索引运用的文章就介绍到这了,

共有 0 条评论

发表评论

邮箱地址不会被公开。 必填项已用*标注