当前位置:首页 > 文章列表 > 数据库 > MySQL > Mysql简易索引方案分析

Mysql简易索引方案分析

来源:亿速云 2023-04-28 16:12:09 0浏览 收藏

“纵有疾风来,人生不言弃”,这句话送给正在学习数据库的朋友们,也希望在阅读本文《Mysql简易索引方案分析》后,能够真的帮助到大家。我也会在后续的文章中,陆续更新数据库相关的技术文章,有好的建议欢迎大家在评论留言,非常感谢!

    Mysql简易索引

    一、没有索引的时候如何查找

    先忽略掉索引这个概念,如果现在直接要查某条记录,要如何查找呢?

    在一个页中查找

    如果表中的记录很少,一个页就够放,那么这时候有 2 种情况:

    • 用主键为搜索条件:这时就是之前文章提过的方式,页面目录中用二分法快速定位到槽,然后遍历该槽对应分组的记录,最终找到指定记录。

    • 用其他非主键的列为搜索条件:因为数据页中没有为非主键列建立页目录,无法通过二分法快速定位槽,只能从 Infimum 记录开始一次遍历单链表的每条记录,效率低下。

    在很多页中查找

    当表中的记录非常多,就会用到很多的数据页来存储,这时候需要 2 个步骤:

    • 定位到记录所在页。

    • 重复上述在一个页中查找的过程。

    总得来说,当没有索引,我们无法快速定位到记录所在页,只能从第一页沿着双向链表(页有前一页和后一页)一直找下去,然后在每一页中重复上述的过程查询指定的记录,需要遍历所有记录,这种方式非常耗时。

    二、一个简易索引

    既然是因为页数太多导致定位记录太慢,那如何解决呢?不妨参考一下“页目录”。

    页目录就是为了根据主键快速定位一条记录在页中的位置而设置的。那么我们也可以想办法为快速定位记录所在的页,搞一个“别的目录”。

    但是这个“别的目录”要想完成还得干好 2 件事。

    1. 下一页用户记录的主键值必须大于上一页的

    假设,每个数据页最多可以放 3 条记录(实际上可以放很多),那么现在向表里插入 3 条记录,每条记录有3个列 c1、c2、c3。为了看着方便,存储行格式也简化下,只留关键属性。注意中间3条是用户记录,首尾的2条是虚拟记录 Infimum 和 Supremum。

    Mysql简易索引方案分析

    此时,继续插入 1 条记录。按照假设的情况,现在需要多分配一个新的页,所以 2 个页之间就变成了这样。

    Mysql简易索引方案分析

    注意红色字体显示的2条记录,本来主键 4 的记录是新插入的,按理应该放在新的页。但是,为了满足下一页用户记录的主键值必须大于上一页的用户记录主键值,做了诸如记录移动的操作,这个过程也可以称为“页分裂”。

    另外,为什么新页是页 28,而不是 11?因为页在磁盘上可能并不挨着,它们只是通过维护上一页和下一页的编号而建立了链表关系。

    2. 给所有的页建立一个目录项

    现在继续向表里增加数据,最终多个页的关系是这样:

    Mysql简易索引方案分析

    因为这些页在磁盘上可能不挨着,所有想要快速从这么多页中根据主键快速定位某记录,就要给它们编制一个目录。

    每个页对应一个目录项,每个目录项包括:

    • 页的用户记录中最小的主键值,用 key 来表示

    • 页号,用 page_no 表示

    所以,给它们编好目录之后就是这样的关系:

    Mysql简易索引方案分析

    那么,现在我想查找主键值为 20 的记录,具体就分两步走:

    先从目录项中根据二分法快速确定出主键值为 20 的记录所在目录项 3 中,且对应的页为 9。知道是在页 9,重复之前的方式,找到最终目标记录。

    到此,一个简易的方案完成。而完成的这个简易目录,它有个别名,叫做索引。

    三、简易索引暴露出的问题

    上述的简易索引是原书作者为了循序渐进的帮助读者理解而设置的内容,这并不是innodb的索引方案。

    那么针对上述的建议索引,看下有哪些问题。

    问题一:

    InnoDB 使用页作为管理存储空间的基本单位,也就是最多只能保存16kb的连续存储。

    当表中记录越来越多,此时就需要非常大的连续存储空间才可以把所有的目录项都装下,这对大数据量的表来说不现实。

    问题二:

    我们经常还要对记录执行增删改操作,会牵一发而动全身。

    比如,上图中我如果把页 28 中的记录都删除,那么页 28 就没必要存在,进而目录项 2 也没必要存在。这时候就需要把目录项 2 后的目录项都向前移动一下。

    就算不移动,把目录项 2 作为冗余放在目录项列表中,仍然会浪费很多的存储空间。

    今天关于《Mysql简易索引方案分析》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于mysql的内容请关注golang学习网公众号!

    版本声明
    本文转载于:亿速云 如有侵犯,请联系study_golang@163.com删除
    mysql与mongodb有哪些区别mysql与mongodb有哪些区别
    上一篇
    mysql与mongodb有哪些区别
    Universal Control Beta 深入研究 – 提示和技巧、教程方法
    下一篇
    Universal Control Beta 深入研究 – 提示和技巧、教程方法
    查看更多
    最新文章
    查看更多
    课程推荐
    • 前端进阶之JavaScript设计模式
      前端进阶之JavaScript设计模式
      设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
      542次学习
    • GO语言核心编程课程
      GO语言核心编程课程
      本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
      511次学习
    • 简单聊聊mysql8与网络通信
      简单聊聊mysql8与网络通信
      如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
      498次学习
    • JavaScript正则表达式基础与实战
      JavaScript正则表达式基础与实战
      在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
      487次学习
    • 从零制作响应式网站—Grid布局
      从零制作响应式网站—Grid布局
      本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
      484次学习
    查看更多
    AI推荐
    • 千音漫语:智能声音创作助手,AI配音、音视频翻译一站搞定!
      千音漫语
      千音漫语,北京熠声科技倾力打造的智能声音创作助手,提供AI配音、音视频翻译、语音识别、声音克隆等强大功能,助力有声书制作、视频创作、教育培训等领域,官网:https://qianyin123.com
      162次使用
    • MiniWork:智能高效AI工具平台,一站式工作学习效率解决方案
      MiniWork
      MiniWork是一款智能高效的AI工具平台,专为提升工作与学习效率而设计。整合文本处理、图像生成、营销策划及运营管理等多元AI工具,提供精准智能解决方案,让复杂工作简单高效。
      155次使用
    • NoCode (nocode.cn):零代码构建应用、网站、管理系统,降低开发门槛
      NoCode
      NoCode (nocode.cn)是领先的无代码开发平台,通过拖放、AI对话等简单操作,助您快速创建各类应用、网站与管理系统。无需编程知识,轻松实现个人生活、商业经营、企业管理多场景需求,大幅降低开发门槛,高效低成本。
      166次使用
    • 达医智影:阿里巴巴达摩院医疗AI影像早筛平台,CT一扫多筛癌症急慢病
      达医智影
      达医智影,阿里巴巴达摩院医疗AI创新力作。全球率先利用平扫CT实现“一扫多筛”,仅一次CT扫描即可高效识别多种癌症、急症及慢病,为疾病早期发现提供智能、精准的AI影像早筛解决方案。
      165次使用
    • 智慧芽Eureka:更懂技术创新的AI Agent平台,助力研发效率飞跃
      智慧芽Eureka
      智慧芽Eureka,专为技术创新打造的AI Agent平台。深度理解专利、研发、生物医药、材料、科创等复杂场景,通过专家级AI Agent精准执行任务,智能化工作流解放70%生产力,让您专注核心创新。
      172次使用
    微信登录更方便
    • 密码登录
    • 注册账号
    登录即同意 用户协议隐私政策
    返回登录
    • 重置密码