专栏首页Java患者MySQL索引底层(一)索引底层原理

MySQL索引底层(一)索引底层原理

MySQL索引底层原理

局部性与页

在操作系统中,我们执行一个指令去磁盘取数据,那么他会从磁盘取出4KB数据,这个4KB就是一个局部单位,而这4KB数据就是你的指令中取出的数据周围的数据,因为操作系统认为你下一次的数据会从这条数据的周围中取。每次从磁盘读取数据在这里称为一次磁盘IO。那么在Mysql的操作当中,也有这么一个原理。

数据结构

现在我们有以上数据,当我们执行一句查询语句

select * from t_user where a = 3;

如果mysql没有局部性的概念的时候,那么这条sql会产生三次IO磁盘操作,则mysql会从磁盘取出第一条数据到内存中,然后比对a字段的值,一直比对到第三条才是正确的,那么会产生3次IO磁盘操作,有了局部性后,那么mysql会从磁盘中进行局部性的取出一页数据,这里一页数据是16KB,一次取出来后放到内存中,进行比对,那么就提高了执行效率。

页大小

show global status like 'Innodb_page_size';

通过上面的sql我们知道此时使用的Innodb存储引擎所对应的页大小是16384 也就是16384/1024 = 16KB。

页数据原理

当我们使用insert插入上面的语句的时候,其实可以看到插入的过程中,这4条数据已经按主键的顺序插入到MySQL中,那么在这个插入的过程是怎么样的,我们来研究一下InnoDB存储的过程。

首先插入第一条数据

接着我们插入第二条数据的时候,第二条数据的主键会跟第一条数据的主键比较大小,然后再插入。

最后插入的数据就会根据主键的大小来排序了

插入的数据就形成了我们页数据中的一部分--用户数据区域,并且每一条数据都有一个指针指向了下一条记录,这也形成了一个链表的形式,现在比如说我们要找a=3的数据,那么我们就得从第一条比对到第三条数据,然后取出,那如果有10000条数据呢?需要比对10000次。因为这是一个链表的数据结构,我们都知道链表的数据结构是增删快,查找慢,那么MySQL的InnoDB的存储引擎是怎么解决的呢,在这里引入了一个页目录

页目录在这里重新为主键排了一次序,比如一组的数据是2条,那么主键为1跟主键为2就为一组

如图,如果当我们要查找a=4的这一条数据,那么就从页目录中找,就可以立即找到该条数据会在第二组,然后在第二组中比对到了a=4之后,取出数据。这就是一页数据,那么当数据足够多,多到一页已经放不下了,自然就会有第二页。这里就引出一个页的指针。

接下来的页就会变成上面的数据结构,假设我们现在要找a=6的数据,那么就会基于第一页去找,发现第一页没有,那就基于第一页到第二页去找,发现在页目录5中,那么a=6就在页目录为5的组中取出数据,假如当页数达到了10000页呢,我们要找a=20000的数据,那就得一页一页的去比如页目录中的值,数据太多也很麻烦,现在就会有一个目录页的数据结构出来,也是同样的思路。

当我们要查找a=6的数据,在目录页中可以定位到在第100页的地址,那么我们就可以直接在第100页中去查找我们的数据。

最后渐渐的,就变成了一个B+树的数据结构。

本文分享自微信公众号 - Java患者(gh_3a16ffdedb6a),作者:Zero

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-02-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 为什么要使用MyCat?

    数据库中间件,所谓中间件,是一类连接软件组件和应用的计算机软件,以便软件各部件之间的通信。

    用户7386338
  • JAVA面试锦囊(九)

    (2) 对于使用like的查询,查询如果是’%xx’不会使用到索引。而’xx%’会使用到索引。

    用户7386338
  • Docker容器技术(指令篇)

    注:同一仓库源可以有多个 TAG,代表这个仓库源的不同个版本,我们使用 REPOSITORY:TAG 来定义不同的镜像。如果你不指定一个镜像的版本标签,例如你只...

    用户7386338
  • 元数据是什么?举例告诉你什么是元数据

    元数据,一个简单的定义是描述数据的数据。在企业中,无论哪里有数据,都有相应的元数据。只有存在完整而准确的元数据,我们才能更好地理解数据并充分利用数据的价值。为了...

    数据前沿
  • 张茉楠:全球数据开放战略的路线图

    摘要:大数据重新定义大国博弈的空间,世界主要国家早已认识到大数据对于国家的战略意义,认为谁掌握了数据的主动权和主导权,谁就能赢得未来。西方主要国家通过全面谋划大...

    灯塔大数据
  • “第五届中国国际大数据大会”将聚焦大数据创新应用

    一份简单的外卖,如何在骑手人员调配、天气变化、出菜速度等因素实时变动的情况下,可以及时送到消费者手里?

    IT大咖说
  • 银行的大数据应用

    “大数据”一词据称最早于1980年出现在美国著名未来学家阿尔文·托夫勒所著的《第三次浪潮》一书中,他在书中将“大数据”称为“第三次浪潮的华彩乐章”。在笔者看来,...

    用户6900693
  • 数据开放促进国家治理转型与变革

    大数据文摘
  • 译见:从无处看世界:大数据的文化意识形态

    “无论什么历史年代里,科学的走向取决于我们如何理解科学”—SandraHarding,《谁的科学?谁的知识?》(1991)

    华章科技
  • 大数据学习:带你从多个维度来分析大数据发展趋势

    如今“大数据”已不再是单纯描述数据特征的词汇,而是一个多学科交融的热点研究领域,其背后有着复杂和深刻的新理念。

    用户4151968

扫码关注云+社区

领取腾讯云代金券