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


prtyaa
prtyaa 2023-12-28 15:52:16 52288
分类专栏: 资讯

假如有多个数据页,想要根据主键来查询数据,直接查询的话也是不行的,因为不知道主键到底是在哪里,即使每个页都有页目录,页目录里保存了主键和槽位,但是查询id=678的数据行的时候,并没有告诉id=678这行数据到底在哪个数据页里面。

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

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

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

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

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

网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。

本文链接:https://www.xckfsq.com/news/show.html?id=31728
赞同 0
评论 0 条
prtyaaL2
粉丝 1 发表 2553 + 关注 私信
上周热门
如何使用 StarRocks 管理和优化数据湖中的数据?  2951
【软件正版化】软件正版化工作要点  2872
统信UOS试玩黑神话:悟空  2833
信刻光盘安全隔离与信息交换系统  2728
镜舟科技与中启乘数科技达成战略合作,共筑数据服务新生态  1261
grub引导程序无法找到指定设备和分区  1226
华为全联接大会2024丨软通动力分论坛精彩议程抢先看!  165
2024海洋能源产业融合发展论坛暨博览会同期活动-海洋能源与数字化智能化论坛成功举办  163
点击报名 | 京东2025校招进校行程预告  163
华为纯血鸿蒙正式版9月底见!但Mate 70的内情还得接着挖...  159
本周热议
我的信创开放社区兼职赚钱历程 40
今天你签到了吗? 27
如何玩转信创开放社区—从小白进阶到专家 15
信创开放社区邀请他人注册的具体步骤如下 15
方德桌面操作系统 14
用抖音玩法闯信创开放社区——用平台宣传企业产品服务 13
我有15积分有什么用? 13
如何让你先人一步获得悬赏问题信息?(创作者必看) 12
2024中国信创产业发展大会暨中国信息科技创新与应用博览会 9
中央国家机关政府采购中心:应当将CPU、操作系统符合安全可靠测评要求纳入采购需求 8

加入交流群

请使用微信扫一扫!