当前位置: 移动技术网 > IT编程>数据库>Mysql > mysql索引的本质

mysql索引的本质

2020年07月30日  | 移动技术网IT编程  | 我要评论

磁盘存取原理

说明:

磁盘逆时针旋转,找到对应的数据后(旋转时间),然后磁头再左右移动读取数据(寻道时间),这就是取一行数据的过程,也叫一次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树

B+树

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

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

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

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

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

链表有什么好处?

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

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

hash

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

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

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网