Bootstrap

MySQL:索引

目录

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指向的位置对应直接返回。

 

;