(五十三)大白话基于主键的索引是如何设计的,以及如何根据主键索引查询?

news2025/1/13 10:06:39

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

在这个基础之上,我们这一讲终于可以开始正式进入索引原理的分析了,我们就先拿最基础的主键索引来分析,一步一步的给大家把索引原理和查询原理,都讲清楚,接着就可以讲解索引设计案例和SQL调优案例了。

现在是这样的,假设我们有多个数据页,然后我们想要根据主键来查询数据,那么直接查询的话也是不行的,因为我们也不知道主键到底是在哪里,是不是?

比如下图,大家回顾一下

image-20230108194817300

现在假设你要搜id=4的数据,你怎么知道在哪个数据页里?没有任何证据可以告诉你他到底是在哪个数据页里啊!

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

所以其实此时就需要针对主键设计一个索引了,针对主键的索引实际上就是主键目录,这个主键目录呢,就是把每个数据页的页号,还有数据页里最小的主键值放在一起,组成一个索引的目录,如下图所示。

image-20230108194843625

现在我们有了上图的主键目录就方便了,直接就可以到主键目录里去搜索,比如你要找id=3的数据,此时就会跟每个数据页的最小主键来比,首先id=3大于了数据页2里的最小主键值1,接着小于了数据页8里的最小主键值4。

所以既然如此,你直接就可以定位到id=3的数据一定是在数据页2里的!

假设你有很多的数据页,在主键目录里就会有很多的数据页和最小主键值,此时你完全可以根据二分查找的方式来找你要找的id到底在哪个数据页里!

所以这个效率是非常之高的,而类似上图的主键目录,就可以认为是主键索引。

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

而且我们假设数据页在磁盘文件里的位置也就是offset偏移量,你也是可以知道的,此时就可以直接通过随机读的方式定位到磁盘文件的某个offset偏移量的位置,然后就可以读取连续的 一大坨数据页了!

大家看完了今天的文章,不知道有什么感想?

是不是觉得索引也不过尔尔罢了,但是其实我们今天讲的是最最简单和基础的一个索引的概念

接下来下一次我们就要讲,到底为什么用B+树来组成一个索引的数据结构,那才是真正的索引!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/379472.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

开启MySQL慢查询以及慢查询日志使用

目录 要开启慢查询,需要关注这几个参数 打开慢查询日志 把日志文件存储在文件中 模拟慢查询 如何寻找并查看慢查询日志 把日志文件存储在表中: 其他关注参数 log_slow_admin_statements Slow_queries 在生产环境中:mysqldumpslow工具分…

问题与解决办法整理一

文章目录1. Linux报错:terminate called after throwing an instance of ‘std::regex_error‘ what(): regex_error;[regex报错,需要将G,GCC都要升级才可以](https://blog.csdn.net/qq_56101220/article/details/127371121)2. ctemplate时遇到连接库失败的问题,将l…

redis(12)持久化操作-RDB

前言 Redis 提供了 2 个不同形式的持久化方式: RDB(Redis DataBase) AOF(Append Of File) RDB 在指定的时间间隔内将内存中的数据集快照写入磁盘, 也就是行话讲的 Snapshot 快照,它恢复时是将快照文件直接读到内存里。 备份是如何执行的 Re…

自动化测试框架/工具选择

单元测试(白盒测试) XUnit等(一般开发自己做) 接口自动化测试(灰盒测试) soapUI,优点:上手快 缺点:商业工具 postMan:chrome插件 优点:免费 缺点:用例管理…

深入了解Apache InLong和重点理解Sort的应用

深入了解Apache InLong和重点理解Sort的应用一、产品优势二、产品架构三、模块四、已支持数据节点五、基本概念六、Agent 插件七、Sort插件八、Manager 插件九、DataProxy插件十、重点理解Sort的应用1.支持多种数据节点2.安装部署3.启动 InLong Sort 任务4.MySQL to PostgreSQL…

数据库——3.数据库的设计规范(实用版)

前面也出过一篇文章,那篇文章里面详细介绍了数据库的设计规范,包括方方面面的内容。说实话,其实里面好多东西都是一种习惯的问题,用不用都影响不大,只要知道那个概念,遇见时能理解,需要时会使用…

云原生可观察性工具泛滥的思考

前言 对于采用容器环境和kubernetes的公司来说,可观察性正变得越来越重要。CNCF最近的一份报告发现,72%的受访者使用了多达9种不同的工具来监控他们的云原生环境和应用程序。当然,如果不使用足够的监控工具,可能会导致隐藏的安全…

【链表OJ题(一)】移除链表元素

​ ​📝个人主页:Sherry的成长之路 🏠学习社区:Sherry的成长之路(个人社区) 📖专栏链接:数据结构 🎯长路漫漫浩浩,万事皆有期待 文章目录链表OJ题(一)1. 移除…

FreeRTOS入门(06):任务通知

文章目录目的基础说明使用演示作为二进制信号量作为计数信号量作为事件组作为队列或邮箱相关函数总结目的 任务通知(TaskNotify)是RTOS中相对常用的用于任务间交互的功能,这篇文章将对相关内容做个介绍。 本文代码测试环境见前面的文章&…

「JVM 高效并发」锁优化

为了线程间更高效的共享数据及解决竞争问题,提高程序执行效率,JDK 6 做了大量锁优化,如适应性自旋(Adaptive Spinning)、锁消除(Lock Elimination)、锁膨胀(Lock Coarsening&#xf…

2、监控界面设计

【任务描述】本任务要求使用相对布局或约束布局以及相应的控件完成智慧园区监控系统界面开发一、相对布局(RelativeLayout)概述相对布局(RelativeLayout)是一种根据父容器和兄弟控件作为参照来确定控件位置的布局方式。使用相对布…

《机器学习》- 习题解析 - 第一章

《机器学习》- 习题 - 第一章 文章目录《机器学习》- 习题 - 第一章一、示例-计算表1.1中的版本空间二、习题 1 - 计算题目中的版本空间三、单个合取式&析合范式的概念四、习题 2 - 计算题目中假设空间的规模大小一、示例-计算表1.1中的版本空间 首先从概念上理解版本空间…

一起玩转开源数据库!OceanBase DevCon 之开源生态全景解析

​ 2023 年 3 月 25 日,首次 OceanBase 开发者大会将在北京举办,OceanBase 首席科学家阳振坤与 OceanBase CTO 杨传辉领携众多技术专家,将与开发者共同探讨单机分布式、云原生、HTAP 等数据库前沿趋势,OceanBase 开源技术全景生…

数据库——1.数据库设计的三大范式

这篇文章我们主要来讲一下数据库设计的三大范式,这个还是很有用的。 目录 1.概述 2.第一范式 3.第二范式 4.第三范式 5.小结 1.概述 为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范…

Python每日一练(20230301)

目录 1. 只出现一次的数字 2. 以特殊格式处理连续增加的数字 3. 最短回文串 1. 只出现一次的数字 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。 说明: 你的算法应该具有线性…

「TCG 规范解读」基础设施架构和协议 (2)

可信计算组织(Ttrusted Computing Group,TCG)是一个非盈利的工业标准组织,它的宗旨是加强在相异计算机平台上的计算环境的安全性。TCG于2003年春成立,并采纳了由可信计算平台联盟(the Trusted Computing Platform Alli…

有什么好用的在线统计表单吗?

有什么好用的在线统计表单吗?最好是免费的?市面上这样的表单工具其实很多,先来看看题主的需求: 收集信息,数据统计数据分析,报表展示 以简道云在线表单为例,能完美实现题主这两个需求—— http…

携程面经1

面经 HDFS读写流程 1.读流程 客户端向NameNode发起读请求(如果存在)NameNode返回一批block地址客户端与第一个block的拓扑距离最近的节点建立连接以packet(64kb)的单位读取数据块。一个block读取完成后客户端会断开与该DataNod…

算法训练营 day59 动态规划 两个字符串的删除操作 编辑距离

算法训练营 day59 动态规划 两个字符串的删除操作 编辑距离 两个字符串的删除操作 583. 两个字符串的删除操作 - 力扣(LeetCode) 给定两个单词 word1 和 word2 ,返回使得 word1 和 word2 相同所需的最小步数。 每步 可以删除任意一个字符…

DBeaver连接mysql数据库图文教程

文章目录前言一、DBeaver连接mysql数据库二、文档下载地址前言 DBeaver是免费、开源、通用数据库工具,是许多开发开发人员和数据库管理员的所选。下面详细介绍Dbeaver连接mysql数据库的过程。 一、DBeaver连接mysql数据库 1、 打开Dbeaver后,按下图操…