MySQL聚簇索引物理结构及主键查询过程

Posted JavaEdge.

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL聚簇索引物理结构及主键查询过程相关的知识,希望对你有一定的参考价值。

数据页分裂的过程,在你不停往表里灌入数据时,会搞出来一个个数据页,若你的主键非自增,他可能会有一个数据行挪动过程,保证你下一个数据页的主键值都大于上一个数据页的主键值。

假设有多个数据页,然后根据主键查询数据,直接查询是不行的,因为不知道主键到底在哪

若你要查id=4的数据,你咋知它在哪个数据页嘞?所以如果还是这样子,你就只能全表扫描,从第一个数据页开始,每个数据页都进入到页目录里查找主键,最坏情况下,所有数据页你都得扫描一遍,贼坑。

对此,就得针对主键设计个索引,针对主键的索引实际上就是主键目录:把每个数据页的页号,还有数据页里最小的主键值放在一起,组成一个索引的目录

有了上图的主键目录就好多了,直接到主键目录搜索id=3的数据,此时就会和每个数据页的最小主键来比,首先id=3大于了数据页2里的最小主键值1,接着小于了数据页8里的最小主键值4。于是就可定位到id=3的数据一定在数据页2。

假设有很多数据页,在主键目录里就会有很多数据页和最小主键值,此时完全可二分查找待查询id在哪个数据页。

所以这效率很高,类似上图的主键目录就能认为是主键索引。

数据页都是一坨坨连续数据,放在很多磁盘文件,所以只要你能根据主键索引定位到数据所在的数据页,此时假设我们有别的方式存储了数据页跟磁盘文件的对应关系,此时你就可以找到一个磁盘文件。

假设数据页在磁盘文件里的位置也就是offset偏移量,你也能知道,此时就能直接通过随机读定位到磁盘文件的某个offset偏移量位置,然后就能读取连续的一大坨数据页。

以上是关于MySQL聚簇索引物理结构及主键查询过程的主要内容,如果未能解决你的问题,请参考以下文章

聚簇索引与非聚簇索引(也叫二级索引)

【Mysql】查询优化——减少回表操作

带你整理面试可能会问到的 聚簇索引和非聚簇索引

mysql索引

MySQL二级索引的查询过程

MySQL二级索引的查询过程