MySQL之索引

认识磁盘

磁盘的基本单位是512B

OS与磁盘交互的基本单位是4K。

MySQL与磁盘交互的基本单位

16384 = 1024 * 16;及MySQL与磁盘交互的基本单位是16KB。这个基本单位在MySQL这里称为page。

MySQL运行的基本逻辑

启动MySQL服务会在内存中开辟一个大的内存块(buffer pool),存放OS加载进来的数据。

在特定的时间内,数据一定是磁盘和内存中都有的。后续操作完内存数据之后,以特定的刷新策略,刷新到磁盘中。而此时,就涉及到了磁盘和内存的数据交互了,也就是IO。而MySQL与内存交互的基本单位就是Page

在buffer pool中存放着从OS加载进来的数据,其管理的基本单位就是Page。每个Page中的数据以链表的形式关联,Page和Page之间也是以链表形式关联的。

链表的优势在于增和删快,但是查询的效率是O(N),并不快。

MySQL为了提高查询效率的措施如下:

1、在单个Page中增添了目录结构,Page页中的数据会自动按主键(唯一、非空、不重复)排序,其目的就是服务目录结构的。每个单个Page页称为普通页,普通页中存放着数据

2、在Page和Page之间页添加了目录结构,称为目录页,目录页中并不存放数据,只用于保存每个Page页中最小的主键值和其地址的映射。

如果有多个目录页也可以按照目录页的策略继续向上构建上一层的目录页,最终能形成单位的目录页。

这样的结构就是B+树结构。

为什么会选择B+树结构?

聚簇索引和非聚簇索引

聚簇索引:MyISAM 引擎同样使用B+树作为索引结果,叶节点的data域存放的是数据记录的地址。其中, MyISAM 最大的特点是,将索引Page和数据Page分离,也就是叶子节点没有数据,只有对应数据的地址。

非聚簇索引:相较于InonoDB索引,InonoDB是将索引和数据放在一起的。

普通索引

InnoDB的非主键索引中叶子节点中并没有数据,而只有对应记录的key值。所以通过辅助(普通)索引,找到目标索引,需要两遍索引。首先检索辅助索引获得主键,然后用主键到主键索引中检索获得数据。这样的过程称为回表查询

创建主键索引

主键索引特点

一个表中,最多有一个主键索引,当然可以使复合主键

主键索引的效率高(主键不可重复)

创建主键索引的列,它的值不能为null,且不能重复

主键索引的列基本上是int

创建普通索引

普通索引特点

一个表中可以有多个普通索引,普通索引在实际开发中用的比较多

如果某列需要创建索引,但是该列有重复的值,那么我们就应该使用普通索引

查询索引

删除索引

索引创建原则

比较频繁作为查询条件的字段应该创建索引

唯一性太差的字段不适合单独创建索引,即使频繁作为查询条件

更新非常频繁的字段不适合作创建索引

不会出现在where子句中的字段不该创建索引

相关推荐
a努力。18 小时前
国家电网Java面试被问:混沌工程在分布式系统中的应用
java·开发语言·数据库·git·mysql·面试·职场和发展
li_wen0118 小时前
文件系统(八):Linux JFFS2文件系统工作原理、优势与局限
大数据·linux·数据库·文件系统·jffs2
wWYy.19 小时前
详解redis(16):缓存击穿
数据库·redis·缓存
JosieBook20 小时前
【数据库】Oracle迁移至KingbaseES:挑战、策略与最佳实践
数据库·oracle
一休哥助手20 小时前
时序数据库选型指南:从核心考量到四大主流数据库深度解析
数据库·时序数据库
Mr__Miss21 小时前
说下Mysql的MVCC机制
数据库·mysql
老徐电商数据笔记21 小时前
BI工具与数据分析平台:数据价值呈现的最后一公里
数据库·数据挖掘·数据分析·bi·bi选型思考
码农水水1 天前
米哈游Java面试被问:机器学习模型的在线服务和A/B测试
java·开发语言·数据库·spring boot·后端·机器学习·word
酉鬼女又兒1 天前
SQL24 统计每个用户的平均刷题数
数据库·sql·mysql
雷工笔记1 天前
数据库|SQLServer2025安装教程
数据库·sqlserver