MySQL:基于主键的索引是如何设计的,以及如何根据主键索引查询?


prtyaa
prtyaa 2024-01-27 23:43:25 55407 赞同 0 反对 0
分类: 资源
假如有多个数据页,想要根据主键来查询数据,直接查询的话也是不行的,因为不知道主键到底是在哪里,即使每个页都有页目录,页目录里保存了主键和槽位,但是查询id=678的数据行的时候,并没有告诉id=678这行数据到底在哪个数据页里面。

所以假设还是这个样子的话,也就只能全表扫描了,从第一个数据页开始,每个数据页都进入到页目 录里查找主键,最坏情况下,所有数据页你都得扫描一遍,还是很坑的。

所以其实此时就需要针对主键设计一个索引了针对主键的索引实际上就是主键目录这个主键目录 呢,就是把每个数据页的页号,还有数据页里最小的主键值放在一起,组成一个索引的目录,如下图所 示。 之前是页目录里保存的数据的id,对应的槽位。现在是主键目录,里面保存了,n多个页目录的号(数据页的号码),以及每一个页目录里最小的那一行数据的id。例如:

现在有了主键目录的话,如果要找id=3的这行数据,那么就可以去主键目录里找,那么id=3小于数据页8里的最小主键id=4,所以不可能在数据页8里,所以只能在数据页2里。

假设有很多的数据页,在主键目录里就会有很多的数据页和最小主键值,此时完全可以根据二分查 找的方式来找id到底在哪个数据页里! 所以这个效率是非常之高的,而类似上图的主键目录,就可以认为是主键索引。

并且数据页都是一坨一坨的连续数据放在很多磁盘文件里的,所以只要能够根据主键 索引定位到数据所在的数据页,此时假设有别的方式存储了数据页跟磁盘文件的对应关系,此时就可以找到一个磁盘文件。 而且假设数据页在磁盘文件里的位置也就是offset偏移量,也是可以知道的,此时就可以直接通过随机读的方式定位到磁盘文件的某个offset偏移量的位置,然后就可以读取连续的 一大坨数据页了!

如果您发现该资源为电子书等存在侵权的资源或对该资源描述不正确等,可点击“私信”按钮向作者进行反馈;如作者无回复可进行平台仲裁,我们会在第一时间进行处理!

评价 0 条
prtyaaL2
粉丝 1 资源 1949 + 关注 私信
最近热门资源
桌面通用(全架构)【在双系统环境下隐藏Windows启动菜单】操作指南  2049
银河麒麟桌面操作系统V10(SP1)2203-如何进行远程桌面互访?  1990
银河麒麟桌面操作系统【保留数据盘重装系统】  1800
麒麟系统各种原因开不了机解决(合集)  1575
桌面通用(全架构)【rpm包转成deb包】操作方法  930
银河麒麟桌面操作系统 V10-SP1 双系统安装 efi 分区问题  914
统信系统安装(合集)  852
统信桌面专业版【手动分区安装UOS系统】介绍  844
统启动异常几种类型(initramfs 模式)  687
最近下载排行榜
桌面通用(全架构)【在双系统环境下隐藏Windows启动菜单】操作指南 0
银河麒麟桌面操作系统V10(SP1)2203-如何进行远程桌面互访? 0
银河麒麟桌面操作系统【保留数据盘重装系统】 0
麒麟系统各种原因开不了机解决(合集) 0
桌面通用(全架构)【rpm包转成deb包】操作方法 0
银河麒麟桌面操作系统 V10-SP1 双系统安装 efi 分区问题 0
统信系统安装(合集) 0
统信桌面专业版【手动分区安装UOS系统】介绍 0
统启动异常几种类型(initramfs 模式) 0
作者收入月榜
1

prtyaa 收益393.72元

2

zlj141319 收益220.97元

3

1843880570 收益214.2元

4

IT-feng 收益213.03元

5

风晓 收益208.24元

6

777 收益172.82元

7

Fhawking 收益106.6元

8

信创来了 收益105.89元

9

克里斯蒂亚诺诺 收益91.08元

10

技术-小陈 收益79.5元

请使用微信扫码

加入交流群

请使用微信扫一扫!