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 条评论