前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL聚簇索引物理结构及主键查询过程

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

作者头像
JavaEdge
发布2022-02-20 09:15:26
1.2K0
发布2022-02-20 09:15:26
举报
文章被收录于专栏:JavaEdgeJavaEdge

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

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

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

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

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

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

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

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

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-02-19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档