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

MySQL的覆盖索引

MySQL的覆盖索引

前言

当一个索引包含了查询所需的全部字段时,就可以提高查询效率,这样的索引又被称之为覆盖索引

以MySQL常见的三种存储引擎为例:InnoDBMyISAMMemory,对于覆盖索引提高查询效率的方式均不同,

下面让我们分别讲讲:

InnoDB

InnoDB中,主键索引的叶子节点存储完整的数据行,称为聚簇索引,而唯一索引普通索引联合索引的叶子节点只存储索引字段和主键值,称之为二级索引

当一条查询sql用到的索引只包含部分需要的字段时,就需要先在二级索引中查到相应数据的主键字段,然后根据主键字段在主键索引中查到全部数据。回到主键索引中查询数据,这个就叫做回表,因为一次索引查询还查不到全部数据,还需要回表一次才能查到全部数据。

但是,如果sql查询所需的字段全部包含在用到的索引中,就可以在二级索引中直接查询到所需的全部数据,不需要再回表了,这种包含所需的全部字段的索引,就叫做覆盖索引

InnoDB中,覆盖索引可以减少回表的次数,提高查询效率。

MyISAM

MyISAM中,索引保存的是数据值,以及指向数据在磁盘中位置的指针

当一条sql查询没有用到索引时,就需要直接到磁盘中的数据文件进行搜索。

当一条sql查询用到索引的部分字段时,会先在索引中查到部分字段的指针,然后再到磁盘中根据指针查询到对应行,再在行中查询全部所需数据。

但是,如果sql查询用到的索引包含全部所需的字段时,也就是用到覆盖索引时,就可以直接在索引中查到全部所需字段的值,不需要再进行磁盘IO。

MyISAM中,覆盖索引可以减少磁盘IO的次数,提高查询效率。

Memory

Memory中,与在MyISAM中逻辑相似,不过Memory是将数据存储在内存中,虽然内存IO磁盘IO快很多,但使用覆盖索引仍有利于减少内存IO,提高查询效率。

需要注意的是,本文并未特别考虑同时使用其它索引的情况,不使用覆盖索引而使用其它索引仍然可能达到同样的效果。

http://www.lryc.cn/news/530757.html

相关文章:

  • 【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】2.12 连续数组:为什么contiguous这么重要?
  • 在React中使用redux
  • lstm预测
  • 《 C++ 点滴漫谈: 二十五 》空指针,隐秘而危险的杀手:程序崩溃的真凶就在你眼前!
  • 【AI】探索自然语言处理(NLP):从基础到前沿技术及代码实践
  • 2025年Android开发趋势全景解读
  • C#面试常考随笔11:Dictionary<K, V>、Hashtable的内部实现原理是什么?效率如何?
  • Linux防火墙基础
  • Qt u盘自动升级软件
  • 【Conda 和 虚拟环境详细指南】
  • Python递归函数深度解析:从原理到实战
  • OpenGL学习笔记(五):Textures 纹理
  • 【TypeScript】基础:数据类型
  • Notepad++消除生成bak文件
  • Android NDK
  • 内部知识库助力组织智力激发与信息共享实现业绩增长
  • 通过F12收集的信息
  • 用Python替代OpenMV IDE显示openmv USB 图像
  • c语言:编译和链接(详解)
  • 数据结构【单链表操作大全详解】【c语言版】(只有输入输出为了方便用的c++)
  • leetcode27.删除有序数组中的重复项
  • [c语言日寄]越界访问:意外的死循环
  • 【c++11】包装器
  • 信息学奥赛一本通 1422:【例题1】活动安排
  • 数据库、数据仓库、数据湖有什么不同
  • llama.cpp LLM_CHAT_TEMPLATE_DEEPSEEK_3
  • 深度学习的应用场景及常用技术
  • 小程序项目-购物-首页与准备
  • 网件r7000刷回原厂固件合集测评
  • 微信登录模块封装