前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一句话让你明白什么是MySQL索引

一句话让你明白什么是MySQL索引

作者头像
姜同学
发布2022-10-27 16:45:04
3570
发布2022-10-27 16:45:04
举报
文章被收录于专栏:姜同学姜同学
代码语言:javascript
复制
索引

我们对索引这个名词最早的认知应该来自初学任何一门程序设计语言时 的数组吧,数组的下标即是索引,索引有什么用?我们的计算机没有想 像的那么聪明,cpu在查找数据是你如果不指定方式他只会从头到尾依次 遍历,有了索引之后我们就可以对Cpu进行优雅的指挥啦。快速定位,提 升效率!

代码语言:javascript
复制
MySQL中的索引

MySQL的定位为数据库,数据库的存在当然是为了存储数据,而生产环境下 9成的操作都是读操作,MySQL的索引就是方便读操作提高查询结果的响应 速度,进而提高数据库的性能。 一句话来讲就是:MySQL中的索引就是能够帮助MySQL快速查找数据的已经 排好序的数据结构。

MySQL索引
MySQL索引
代码语言:javascript
复制
MySQL中的索引方法

我一菜鸟你可能对我说的话有质疑,所以打开navicat(MySQL的可视化工具) 截图当作证据。

索引方法
索引方法

从图中可以看到MySQL提供了两种索引方法BTREE和Hash. 其实MySQL的索引业内都叫其B+TREE他是MySQL对B-TREE的改良,B+TREE 怎么来的我们以图片的形式来见证他的演化。

二叉树

二叉树
二叉树

二叉树典型的结构就是第一个节点为根节点,之后的节点会和根节点作比较 比根节点大的会成为根节点的右子树,比根节点小的会成为左子树。最优的 时间复杂度为O(nlogn),如果MySQL中的索引字段从0开始依次递增就会出现下 面这种情况

二叉树变链表
二叉树变链表

是不是长得非常像链表呢,时间复杂度也变成了O(n),所以就有了下面的 红黑树。

二叉平衡树(红黑树)

红黑树
红黑树

他会根据自身的平衡规则(我在ConcurrentHashmap中写到了平衡规则)使数据 结构本身始终维持二叉树的结构。但是MySQL中动辄千万条数据,最后形成的二叉树 高度依然很高,速度之提升了不到一半,这不是我们想看到的。所以我们可以对红黑 树进行横向扩展一个节点保存多个节点让二叉树的高度小于等于4这就是下面的B-TREE

B-TREE

b-tree
b-tree

有的人可能会说我吹牛,就这点数据高度就为3了,千万条数据高度还能保持在4之内?

节点大小
节点大小

一个节点16KB一条数据不超所1KB留下8kb保存下层节点指针 B-TREE的结构,千万条高度为4足矣。既然B-TREE者这么强,那么B+TREE 又为何而来呢?select filednames from tablename where filednames < xxx B-TREE怎么办呢? 这时就要看B+TREE了

B+TREE

B+TREE
B+TREE

其实B+TREE就是在B-TREE的基础上根节点有了指向相邻子树的指针 并且进行查询时MySQL会将节点加载到内存中避免了大量的磁盘IO。

代码语言:javascript
复制
HASH索引

HASH索引就是对指定字段进行哈希算算(例如推特的雪花算法,Redis的CRC16) 求出一个唯一的值作为地址指针,直接拿到数据保存在硬盘的位置。 其实理解了B+TERR对B-TREE的改良,你也就能理解为什么HASH索引 不常见了,当出现范围查找时,HASH怎么办呢?

代码语言:javascript
复制
聚簇索引与非聚簇索引

聚簇与非聚簇的区别其实是由MySQL的存储引擎导致的,先上张图 感受一下差异吧。

我可能被墙掉了
我可能被墙掉了

可以看出来使用InnoDB存储引擎的表索引和数据存在一个文件里,而 使用Mylsam存储引擎的表索引与数据存在了两个文件。表索引和数据 存在一个文件里InnoDB使用的即是聚簇索引B+TERR的日子节点保存的 是索引所在行数据,而MylSAM的B+TREE的日子节点存储的是数据文件 中对应的的磁盘地址。

我可能被墙掉了
我可能被墙掉了
我可能被墙掉了
我可能被墙掉了
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-08-06T,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 二叉树
  • 二叉平衡树(红黑树)
  • B-TREE
  • B+TREE
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档