补充之前的一篇 MySQL 的索引为什么能加快查询速度

在之前的一篇文章中写了 MySQL 的索引为什么能加快查询速度,结合这两篇文章,相信你会对 MySQL 的索引有更深一步的了解

​首先我们要理解一件事,无论什么数据库,它的数据一定都是存储在硬盘中的,而硬盘和内存之间的读写速度差距是非常大的 所以查询性能的瓶颈不再 CPU ,而是取决于内存和磁盘的读写速度

然后让我们回忆一下,在数据结构中如果我们想将一个查询的性能提高为log ,我们可以启用二叉树,那么如果我们应用三叉树,查询性能是不是可以提高到log3,要是多叉树,性能是不是会进一步提升

由此,就演化出了多叉树做索引这种方式,也就是大家所说的B树,传统的B树数据和索引存放在一起,一次性读进内存的数据量有限,这种方式虽然加快了数据的检索方式,但是仍然有改进空间 于是B+树横空出世

B+ 树是MySQL InnoDB 存储引擎下默认的索引数据结构,它的非叶子结点只存索引,叶子结点存储索引和数据,而叶子结点通常就是数据在硬盘中的位置,因此在进行索引检索的时候,多叉树会以非常高的效率在内存中去检索索引的所在位置,根据索引记录的地址去磁盘中检索想要的数据,这种方式就大大加快了数据的查询速度

总结:

  1. 数据存储在磁盘上,而磁盘查询的速度很慢

  2. 提高磁盘的查询速度主要通过减少 I/O 次数和增加单次磁盘 I/O 的数据有效量

  3. 索引通过多阶来减少 I/O 次数

  4. B+ 树通过将索引和业务数据分离的方式来提高单次 I/O 的数据有效量 从而减少 I/O 次数

  5. 索引通过树数据的有序性来缩小查询范围

  6. 索引本身是表中的单个字段或是多个字段,数据量本身要比整个一条记录少的多,这样,即使通过扫描的方式查询索引也比查询数据库快

相关推荐
91刘仁德1 小时前
MySQL 数据库基础操作知识点整理
数据库·mysql·oracle
wuqingshun31415915 小时前
MYSQL默认的事务隔离级别是什么?为什么选择这个级别?
数据库·mysql
这个DBA有点耶18 小时前
导个数据中文全变问号?字符集这事儿真没那么简单
数据库·mysql·代码规范
wuqingshun31415918 小时前
MYSQL中如果发生死锁应该如何解决?
数据库·mysql
是上好佳佳佳呀20 小时前
MySQL 基础:从数据库概念到表结构管理DDL
数据库·mysql
DB哥讲数据库21 小时前
【最新】MySQL9.7安装教程:图文详解(附MySQL安装包)
android·mysql·adb
DB哥讲数据库1 天前
MySQL 8.4 安装教程:超详细图文讲解(附mysql安装包)
linux·数据库·mysql·centos
wefg11 天前
【MySQL】MySQL C API 访问 MySQL
数据库·mysql
L1624761 天前
Zabbix 7.0 LTS 完整部署与运维手册(AlmaLinux 9 + MySQL 8.0 + Nginx)
运维·mysql·zabbix
玖玥拾2 天前
C# 语言进阶(十五)C# 游戏服务端 MySQL 数据库
服务器·开发语言·网络·数据库·mysql·c#