| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> MySQL索引知识点总结 -> 正文阅读 |
|
[数据结构与算法]MySQL索引知识点总结 |
目录 0 引言针对MySQL索引相关知识点的总结,文中图片来自小林coding 1 InnoDB索引底层的数据结构1.1 什么是索引首先还是说一下为什么需要索引,索引就是用来帮助我们快速查找数据用的,最典型的例子就是我们书的目录,当我们要查找某一章节的内容的时候可以先到目录中找到对应章节的页码,然后直接翻到对应页就可以了,这里的目录就可以理解为一个索引。这里只是说一下什么是索引,以及索引是干什么用的,我们innodb引擎的索引与目录这种还是有非常大的区别的,在我们的InnoDB引擎中——索引即数据,数据即索引;目录这种更像是我们MyISAM引擎中的索引结构。 1.2 数据页的基本结构InnoDB引擎是以页为基本存储单位来管理我们数据的,一个页的大小一般为16KB,我们B+树索引的基本单位就是数据页,也成为索引页(Index页),数据页中有许多的数据,和我们索引最相关的数据有三个,分别是File Header,页目录和记录
1.3 B+树索引前面说到数据页在底层是一个双向链表,这还并不是innodb引擎存储数据的最终形式,innodb引擎中的数据在底层是一棵B+树,具体的结构就是在数据页构成的双向链表中再向上抽取处若干页,在这些页中,每一条记录保存的是该条记录对应数据页的最小的记录索引列信息和对应数据页的信息。同样我们在这一层还可以继续向上抽取处若干索引页直到只有一个索引页,也就是我们B+树的根索引页为止,这时就构成了一个B+树,也就是我们索引真正的数据结构了,一个可能的结构如下图所示 1.4 B+树索引的特点通过上面的介绍,可以看到B+树有以下特点
2?B+树中数据的查找说完了索引的结构,我们来看在B+树中如何查找一条记录,就以上图中的B+树为例子,比如我们要查找第4条记录,具体过程如下
可以看到查找一条记录在可以利用索引的情况下,我们只需要查询3个数据页就可以查找到相应的数据了,并且在页内是通过二分查找的方式进行搜寻,所以B+树查找数据的效率是非常高的 3 索引的分类我们的索引大致分为三大类,分别是聚簇索引,二级索引和联合索引,具体介绍如下:
4 为什么采用B+树来作为索引索引还有许多其他的数据结构,比如哈希表,有序数组,平衡二叉搜索树,B树等,来看看使用这些数据结构来做索引会有什么问题
正是因为上面的索引结构有这样或者那样的缺点,所以最终我们的InnoDb引擎并没有选择以上的索引结构,而是使用了B+树,B+树在B树的基础上由进行了以下优化:
有了上面的优化,我们的B+树相对于B树就有了以下优点:
5 索引建立的规则
6 几类索引失效的情况加了索引也不一定走索引,我打算用一个例子来说明索引失效的情况,比如我们有一张表如下:
7 覆盖索引覆盖索引是innodb引擎查询的一种优化,若我们的查询语句用到了二级索引并且我们要查询的字段在二级索引中本身就有,那么我们就会使用覆盖索引,也就是说直接在二级索引中拿到我们需要的数据,不必再回表到聚簇索引中再次查询,可以看到覆盖索引可以提高我们查询的效率 8 索引下推当我们使用联合索引中进行一些复杂查询的时候,可以在联合索引中使用索引下推来提高我们的查询效率 举个例子,有一张表,其中三个字段建立了一个联合索引(a, b, c),当我们执行下面语句的:
查询过程是这样的,在联合索引中查找a > 10的记录并一一回表查询到所需的数据 当我们执行下面语句:
查询过程是这样的:在联合索引中查到到a > 10的记录,对于每一条记录我们并不急着回表,而是在联合索引中接着查看这条记录的b是否满足 b < 10,满足则回表查找完整记录,不满足则接着查询下一条记录 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年2日历 | -2025/2/6 5:52:41- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |