目录
1.MySQL索引是干什么的
2.铺垫知识
3.单个page的理解
4.页目录
单页情况
多页情况
1.MySQL索引是干什么的
MySQL的索引是提高查询效率,主要提高海量数据的检索速度。
2.铺垫知识
操作系统与磁盘之间IO的基本单位是4kb。
数据库是一个应用层软件,数据库与操作系统之间IO的基本单位16kb,也可以认为数据库与磁盘之间IO的基本单位16kb。
为什么数据库与磁盘IO的基本单位这么大?
数据库一切的CURD操作都是在内存中,也就注定了需要有大量的IO操作,即使我需要修改的数据只有1kb也会直接加载16kb的数据到内存,因为我下次修改的数据也可能在这16kb中,在一定概率上提高了IO的效率。
数据库与磁盘IO的基本单位称之为页(page)
查看下页的大小
16384就是16kb。
3.单个page的理解
数据库的page都是像链表一样串在一起的,page内的数据也是连接在一起的,也就是说我想找到某个数据必须从头遍历。
4.页目录
单页情况
页目录实际就是指向数据记录的指针。
通过引入页目录就可以大大减少页内的遍历,但是会占用一点空间。
假设有1000条数据,有20个页目录,最大的查询次数也就是 20 + 50 = 70次,比从头遍历效率搞了很多。
多页情况
当数据量增大时MySQl会开辟新的页来进行存储。
那要是有1000个page的化还不是得遍历1000吗?
是的确实会有这样的问题,在增加一级索引就可解决这个问题,假设2级的page也变得很多,还可以再增加一级page依次类推。
假设我想寻找8号杨过,遍历二级page的页目录,发现起始位置为6的页中,通过指针找到一级page,遍历一级page的页目录,发现正好与目录2指向的位置对应直接返回。