• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    MySQL覆盖索引的使用示例

    什么是覆盖索引

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

    使用覆盖索引,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覆盖索引使用的文章就介绍到这了,更多相关MySQL覆盖索引内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    您可能感兴趣的文章:
    • mysql利用覆盖索引避免回表优化查询
    • mysql中关于覆盖索引的知识点总结
    • MySQL 的覆盖索引与回表的使用方法
    • Mysql覆盖索引详解
    • Mysql性能优化案例 - 覆盖索引分享
    • Mysql性能优化案例研究-覆盖索引和SQL_NO_CACHE
    • MySQL 覆盖索引的优点
    上一篇:mysql 实现添加时间自动添加更新时间自动更新操作
    下一篇:如何在mysql进行查询缓存及失败的解决方法
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    MySQL覆盖索引的使用示例 MySQL,覆盖,索引,的,使用,