商务服务
MySQL 索引原理详解
2024-11-04 17:24

1.1 索引是什么

当一张表有 500 万条数据,在没有索引的 name 字段上执行一个查询

MySQL 索引原理详解

如果 name 字段上面有索引呢

添加索引

索引的创建是需要消耗时间的
有索引的查询和没有索引的查询相比,效率相差几十倍。
索引到底是什么呢?为什么可以对我们的查询产生这么大的影响?创建索引的时候做了什么事情

1.1.1.索引图解

数据是以文件的形式存放在磁盘上面的,每一行数据都有它的磁盘地址。如果没有索引的话,我们要从 500 万行数据里面检索一条数据,只能依次遍历这张表的全部数据(循环调用存储引擎的读取下一行数据的接口,直到找到这条数据。

但是我们有了索引之后,只需要在索引里面去检索这条数据就行了,因为它是一种特殊的专门用来快速检索的数据结构,我们找到数据存放的磁盘地址以后,就可以拿到数据了。

这个很容易理解,就像我们从一本 500 页的书里面去找特定的一小节的内容,肯定不可能从第一页开始翻。

这本书会有专门的目录,它可能只有几页的内容,它是按页码来组织的,可以根据拼音或者偏旁部首来查找,我们只要确定内容对应的页码,就能很快地找到我们想要的 内容。

1.1.2.索引类型

普通(Normal:也叫非唯一索引,是最普通的索引,没有任何的限制。
唯一(Unique:唯一索引要求键值不能重复。另外需要注意的是,主键索引是一种特殊的唯一索引,它还多了一个限制条件,要求键值不能为空。主键索引用 primay key创建。
全文(Fulltext:针对比较大的数据,比如我们存放的是消息内容,有几 KB 的数据的这种情况,如果要解决 like 查询效率低的问题,可以创建全文索引。只有文本类型的字段才可以创建全文索引,比如 char、varchar、text

在 5.6 的版本之后,MyISAM 和 InnoDB 都支持全文索引。但是 MySQL 自带的全文索引功能使用限制还是比较多,建议用其他的搜索引擎方案(比如ElasticSearch)。

我们说索引是一种数据结构,那么它到底应该选择一种什么数据结构,才能实现数据的高效检索呢

2.1 二分查找

很火的猜数字游戏,猜现在是100以内的几,最后通过不断缩小范围,锁定数字

这个就是二分查找的一种思想,也叫折半查找,每一次,我们都把候选数据缩小了一半。如果数据已经排过序的话,这种方式效率比较高
所以可以考虑用有序数组作为索引的数据结构。
有序数组的等值查询和比较查询效率非常高,但是更新数据的时候会出现一个问题,可能要挪动大量的数据(改变 index,所以只适合存储静态的数据。
为了支持频繁的修改,比如插入数据,我们需要采用链表。链表的话,如果是单链表,它的查找效率还是不够高
所以,有没有可以使用二分查找的链表呢
为了解决这个问题BST(Binary Search Tree)也就是我们所说的二叉查找树诞生了

2.2 二叉查找树(BST Binary Search Tree)

2.3 平衡二叉树(AVL Tree(左旋、右旋

当我们用树的结构来存储索引的时候,因为拿到一块数据就要在 Server 层比较是不是需要的数据,如果不是的话就要再读一次磁盘。
访问一个节点就要跟磁盘之间发生一次 I/O。InnoDB 操作磁盘的最小的单位是一页(或者叫一个磁
盘块大小是 16K(16384 字节), 那么一个树的节点就是 16K 的大小

2.4. 多路平衡查找树(B Tree(分裂、合并

一个好玩的

比如 Max Degree(路数)是 3 的时候,我们插入数据 1、2、3,在插入 3 的时候,本来应该在第一个磁盘块,但是如果一个节点有三个关键字的时候,意味着有 4 个指针, 子节点会变成 4 路,所以这个时候必须进行分裂(其实就是 B+Tree)。把中间的数据 2提上去,把 1 和 3 变成 2 的子节点。如果删除节点,会有相反的合并的操作。

2.5 B+树 (加强版多路平衡查找树

InnoDB 中的 B+Tree 这种特点带来的优势
1:它是 B Tree 的变种,B Tree 能解决的问题,它都能解决。B Tree 解决的两大问题是什么(每个节点存储更多关键字;路数更多
2:扫库、扫表能力更强(如果我们要对表进行全表扫描,只需要遍历叶子节点就可以了,不需要遍历整棵 B+Tree 拿到所有的数据
3: B+Tree 的磁盘读写能力相对于 B Tree 来说更强(根节点和枝节点不保存数据区,所以一个节点可以保存更多的关键字,一次磁盘加载的关键字更多
4:排序能力更强(因为叶子节点上有下一个数据区的指针,数据形成了链表
5:效率更加稳定(B+Tree 永远是在叶子节点拿到数据,所以 IO 次数是稳定的

2.6. 索引方式:真的是用的 B+Tree 吗

    以上就是本篇文章【MySQL 索引原理详解】的全部内容了,欢迎阅览 ! 文章地址:http://syank.xrbh.cn/news/9995.html 
     资讯      企业新闻      行情      企业黄页      同类资讯      首页      网站地图      返回首页 迅博思语资讯移动站 http://kaire.xrbh.cn/ , 查看更多   
最新新闻
怎么样查询sci文章发表是否被检索呢?
  怎么样查询sci文章发表是否被检索呢?现如今,发表论文的学者、科研工作者越来越多,像在SCI、EI、SSCI等刊物上投稿论文之后
公司热点|开滦集团一矿业发生冒顶事故 6人被困 上市公司开滦股份近年净利下滑
开滦集团前身开滦矿务局,先后隶属国家燃料工业部、煤炭工业部,1998年下放河北省管理,1999年改制为开滦(集团)有限责任公司,
一条用了13年的轮胎会是什么样(内含轮胎店安装避坑秘籍)
一条能用多久,是3年还是5年,是5万公里,还是8万公里,我们经常会遇到这样类似的问题,给出的标准答案应该是根据车主的实际情况
埋点分析文档(DRD) - AxureMost
AxureMost 官网 埋点分析文档(DRD) - AxureMost 数据埋点文档是产品、数据分析师和开发人员之间沟通的桥梁,
帆软&唐隆基:详解供应链新质生产力的五点本质和四大创新!
在数字化浪潮的推动下,供应链管理正经历着前所未有的变革。2024年9月7日,帆软智数大会在杭州成功举办,汇聚了众多行业专家和实
太酷了!哈尔滨一老太热舞视频抖音播放量超2000万次
  东北网7月26日讯 6月初,一位哈尔滨老太太和一群年轻人在松花江边跳街舞的视频,在抖音播放量超过2000万次,一度排名第一。
TikTok在美国又出事,张一鸣的全球化迎来梦醒时分
题图来自Techcrunch,本文来自微信公众号:壹娱观察(ID: yiyuguancha),文:大娱乐家屋漏偏逢连夜雨,就在上周刚刚被印度政府
垃圾分类 | 关于有害垃圾,你知道多少呢....
-垃圾分类-关于有害垃圾✦你知道多少呢....✦一说到有害垃圾大家会联想到有害、危险物质到底什么是有害垃圾?有害垃圾有什么危害
小程序开发:用原生还是选框架(wepy/mpvue/uni-app/taro)?
自 2017-1-9微信小程序诞生以来,历经2年多的迭代升级,已有数百万小程序上线,成为继Web、iOS、Android之后,第四大主流开发技
中山退休养老金怎么计算(2023在线计算最新)退休养老金怎么计算
  中山退休能领多少养老金,可能是很多老人想了解的事情。我们知道中山对于职工退休方面是有一定的要求的,很多人不知道退休养
本企业新闻
推荐企业新闻

点击拨打: