欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

mysql索引的本质

程序员文章站 2024-01-12 20:19:46
磁盘存取原理说明:磁盘逆时针旋转,找到对应的数据后(旋转时间),然后磁头再左右移动读取数据(寻道时间),这就是取一行数据的过程,也叫一次IO。如果不加索引的情况,每查一条数据数据都要经历一次磁盘IO,比如某表由十条数据,要取出最后一条数据那么需要经过十次IO,效率低下。......

磁盘存取原理

mysql索引的本质

说明:

磁盘逆时针旋转,找到对应的数据后(旋转时间),然后磁头再左右移动读取数据(寻道时间),这就是取一行数据的过程,也叫一次IO。

如果不加索引的情况,每查一条数据数据都要经历一次磁盘IO,比如某表由十条数据,要取出最后一条数据那么需要经过十次IO,效率低下。

mysql全文索引

ALTER TABLE m1 ADD FULLTEXT INDEX name_idx (`name`) WITH PARSER ngram;
SELECT * FROM m1 WHERE MATCH (name) AGAINST ('大爷*');

mysql innodb将索引从磁盘加载到内存的最小单位?

最小单位是16kb,也就是一个page,默认16kb

为什么是固定的?

因为在操作系统中,当你访问一块数据的时候,操作系统会认为它相邻的数据马上也会被加载

每加载树的一个节点,就是一次磁盘的IO

mysql用是B+树

B树

mysql索引的本质

B+树

mysql索引的本质

1:B+树关键字的个数和分叉数是相等的

2:非叶子节点不存储数据(地址)

3:只有叶子节点才会存储数据

4:每个数据查询的IO次数都一样

mysql索引的本质

5:叶子节点是一个有序的链表结构

链表有什么好处?

正常情况查找B树都是通过根节点前序、中序、后序去查找,如果有了链表,全表扫描的时候直接从叶子节点去查找就行了

排序能力更强,比如要查一个where xx>20,这种搜索只需要在叶子节点通过链表查询相邻的数据就行了。

hash

mysql还有一种索引结构就是hash,hash的时间复杂度是O(1),比B+树更快,但是hash索引只针对等值查询,如果sql中有范围查询是无法用到hash方式的索引,但是hash索引会有hash冲突,在innoDb中,mysql是不会将hash放到字段上的

一般是page页会放到内存中,为了进一步提升访问速度,会有个内存缓冲池,而这个缓存池中有些page是热点的,所以它会为这些热点页去建立hash索引

mysql索引的本质

mysql索引的本质

本文地址:https://blog.csdn.net/qq_38081917/article/details/107647521

相关标签: mysql