当前位置: 首页 > news >正文

MySQL——覆盖索引

覆盖索引介绍

理解方式一:索引是高效找到行的一个方法,但是一般数据库也能使用索引找到一个列的数据,因此它不必读取整个行。毕竟索引叶子节点存储了它们索引的数据;当然通过读取索引就可以得到想要的数据,那就不需要读取行了。一个索引包含了满足查询结果的数据就叫做覆盖索引。

理解方式二:非聚簇复合索引的一种形式,它包括在查询里的SELECT、JOIN和WHERE子句用到的所有列(即建索引的字段正好是覆盖查询条件中所涉及的字段)。

简单说就是,索引列+主键包含SELECT到FROM之间查询的列

举例

EXPLAIN SELECT * FROM `s1` WHERE key2 <> 10036

在这里插入图片描述

此时是全表扫描,索引失效。

将查询字段修改成索引字段

EXPLAIN SELECT key2 FROM `s1` WHERE key2 <> 10036

在这里插入图片描述

此时查询的字段索引中存在,不需要回表查询,效率高于回表查询。

覆盖索引利弊

好处

1、避免Innodb表进行索引的二次查询(回表)

Innodb是以聚集索引的顺序来存储的,对于Innodb来说,二级索引在叶子节点中所保存的是行的主键信息,如果使用二级索引查询数据,在查找到相应键值后,还需要通过主键进行二次查询才能获取我们真实所需要的数据。

在覆盖索引中,二级索引的键值中可以获取所要的数据,避免了对主键的二次查询,减少了IO操作,提升了查询效率。

2、可以把随机IO变成顺序IO加快查询效率

由于覆盖所有是按键值的顺序存储的,对于IO密集型的范围查找来说,对比随机从磁盘读取每一行的数据IO要少的多,因此利用覆盖索引在访问是也可以把磁盘的随机读取的IO转变成索引擦好像的顺序IO

由于覆盖索引可以减少树的搜索次数,显著提升查询性能,所以使用覆盖索引是一个常用的性能优化手段

弊端

索引字段的维护总是有代价的。因此,在建立冗余索引来支持覆盖索引时就需要权衡考虑了。

相关文章:

  • 面试经典题:创建三个线程,按顺序依次循环打印hello+i
  • 你觉得学历在贬值吗?
  • 关于ASPICE 4.0评估师资质更新的说明-亚远景科技
  • Java多线程核心工具类
  • 运维开发之Linux机器码
  • 健康中国,福佑全球!第32届广州大健康展将于6月14-16日盛大举办
  • 21、matlab生成脉冲序列:pulstran()函数
  • thinkpad T440p ubuntu-slam软件安装记录
  • 【前端 - Vue】Vuex基础入门,创建仓库的详细步骤
  • 【Ambari】Docker 安装Ambari 大数据单机版本
  • vscode+latex设置跳转快捷键
  • PhpSpreadsheet表格导出
  • 一种基于高德Web API实现沿路画面的实现
  • 54.WEB渗透测试-信息收集- 端口、目录扫描、源码泄露(2)
  • 从 URL 中获取数据并创建列表解析
  • [Vue CLI 3] 配置解析之 css.extract
  • 【附node操作实例】redis简明入门系列—字符串类型
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • 77. Combinations
  • canvas 五子棋游戏
  • IndexedDB
  • Java 内存分配及垃圾回收机制初探
  • LeetCode18.四数之和 JavaScript
  • php ci框架整合银盛支付
  • Shell编程
  • Vue 2.3、2.4 知识点小结
  • 阿里研究院入选中国企业智库系统影响力榜
  • 从0到1:PostCSS 插件开发最佳实践
  • 老板让我十分钟上手nx-admin
  • 如何胜任知名企业的商业数据分析师?
  • 如何抓住下一波零售风口?看RPA玩转零售自动化
  • 突破自己的技术思维
  • 用Python写一份独特的元宵节祝福
  • 《天龙八部3D》Unity技术方案揭秘
  • ​软考-高级-信息系统项目管理师教程 第四版【第14章-项目沟通管理-思维导图】​
  • #if #elif #endif
  • #Linux(Source Insight安装及工程建立)
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (3)选择元素——(17)练习(Exercises)
  • (4)STL算法之比较
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (pojstep1.1.2)2654(直叙式模拟)
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (二)fiber的基本认识
  • (附源码)ssm失物招领系统 毕业设计 182317
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (六)DockerCompose安装与配置
  • (三十)Flask之wtforms库【剖析源码上篇】
  • (学习日记)2024.04.10:UCOSIII第三十八节:事件实验
  • (一)Spring Cloud 直击微服务作用、架构应用、hystrix降级
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • (杂交版)植物大战僵尸
  • (转)linux下的时间函数使用
  • .NET/C# 异常处理:写一个空的 try 块代码,而把重要代码写到 finally 中(Constrained Execution Regions)