Mysql存储结构「建议收藏」

Mysql存储结构「建议收藏」索引是一种加快查询速度的数据结构,常用索引结构有hash、B Tree和B+Tree。本节通过分析三者的数据结构来说明为啥Mysql选择用B+Tree数据结构。 数据结构 Hash hash是基于哈希

Mysql存储结构

索引是一种加快查询速度的数据结构,常用索引结构有hash、B-Tree和B+Tree。本节通过分析三者的数据结构来说明为啥Mysql选择用B+Tree数据结构。

数据结构

Hash

Mysql存储结构「建议收藏」

hash是基于哈希表完成索引存储,哈希表特性是数据存放是散列的。

优点:

等值查询快,通过hash值直接定位到具体的数据。

缺点:

  1. 范围查询效率低(表中的数据是无序数据,在日常开发中通常需要范围查询,该情况下hash需要一个一个查找后合并返回)
  2. hash表在使用的时会将所有数据加载到内存,比较消耗内存
  3. hash算法不好会出现hash碰撞的情况
  4. 哈希索引只包含哈希值和行指针,而不存储字段值,索引不能使用索引中的值来避免读取行
  5. 哈希索引不支持部分列匹配查找,哈希索引是使用索引列的全部内容来计算哈希值

B-Tree

Mysql存储结构「建议收藏」

B-Tree特点:

  1. 所有键值数据分布在整棵树各个节点中
  2. 搜索有可能在非节点结束,在关键字全集内查找,类似二分查找
  3. 所有叶子节点都在同一层,并且以升序排列

B+Tree

Mysql存储结构「建议收藏」

B+Tree 是在B-Tree的基础之上做的一种优化,变化如下:

  1. B+Tree 非叶子节点不存放数据
  2. 叶子节点存储关键字和数据,非叶子节点的关键字也会沉到叶子节点,并且排序
  3. 叶子节点两两指针相互连接,形成一个双向环形链表(符合磁盘的预读特性),顺序查询性能更高

Mysql为什么选择B+Tree

Mysql存储结构「建议收藏」

Mysql官网文档中写到InnoDB索引用的是 B-tree,但是底层用的是B+Tree。Mysql存储数据是以页为单位,默认一个页可以存放16K数据。假设B-Tree和B+Tree都是3层深度,表中每个记录为1K(假设的,一般不会这么大,别较真),那么三层深度的B-Tree存储 16 x 16 x 16 = 4096(比这个数还要少,因为每个页中还要存放指针和其它的数据)。B+Tree第一、二层存放的是key,假设是Long类型的主键,那么第一、二层每页存放数据约为 16 x 1024 / 8 = 2048,三层深度可以存放 2048 x 2048 x 16 = 6700W。MySQL查询过程是按页加载数据的,每加载一页就是一次IO操作,B+Tree进行三次IO可以查询6700W数据量。从这里也可以知道Mysql一般设置三层深度就足够了。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/9261.html

(0)
上一篇 2023-02-12
下一篇 2023-02-12

相关推荐

  • 解决Python中write argument必须为str而非bytes的错误

    解决Python中write argument必须为str而非bytes的错误a href=”https://beian.miit.gov.cn/”苏ICP备2023018380号-1/a Copyright www.python100.com .Some Rights Reserved.

    2024-01-06
    116
  • mysql 5.7 主从_MySQL source

    mysql 5.7 主从_MySQL source一、环境准备 # rpm -qa |grep mariadb |xargs yum remove -y # setenforce 0(临时关闭),(selinux配置文件:SELINUX=disabl

    2023-05-06
    166
  • 使用Python计算余弦相似度

    使用Python计算余弦相似度在自然语言处理中,衡量两个文本的相似度常常使用余弦相似度。余弦相似度基于向量空间模型,将文本看作向量,利用两个向量之间的夹角余弦值作为它们的相似度。在一定程度上,它可以定量地反映两个文本在内容上的相似性。

    2024-01-23
    96
  • Python Suffix End: 简洁有效的后缀操作实现

    Python Suffix End: 简洁有效的后缀操作实现后缀是指字符串中最后几个字符构成的子串,通常用于匹配文件类型或者文件夹的特定结尾。比如一个文件名为example.jpg,这个文件的后缀就是jpg。在程序设计中,我们常常需要对文件类型进行判断,此时就需要对后缀进行操作。

    2024-04-10
    74
  • Python软件包中心

    Python软件包中心Python是一种高级程序设计语言,它通过简单易懂的语法和强大的功能来吸引众多开发人员。是当前行业中最流行的编程语言之一。Python的强大功能之一就是拥有丰富的软件包,这些软件包为Python程序员提供了方便、高效的编程方式。

    2024-04-26
    65
  • 快速学习Python编程的技巧

    快速学习Python编程的技巧Python作为一种简单易用、高效快速的编程语言,已经在业界和学术界广泛应用。如果你想快速掌握Python编程,这里提供了一些实用的技巧和建议,帮助你快速进入和掌握Python编程的世界。

    2024-03-05
    82
  • 以10为底的对数计算器——快速求出任何数的以10为底的对数!

    以10为底的对数计算器——快速求出任何数的以10为底的对数!以10为底的对数计算器是一种可以快速计算任何数的以10为底的对数的工具。以10为底的对数是数学中非常常见的一种对数,通常简写为lg或log10。在某些学科领域中,如物理学、化学和工程学等,在对数方面的应用非常广泛。

    2024-01-08
    293
  • Python参数定义:函数参数的声明和使用方法

    Python参数定义:函数参数的声明和使用方法在Python中,函数参数类型有普通参数、默认参数、可变参数和关键字参数四种类型。其中最基础的是普通参数,也就是通过位置传递参数的方式,直接传入函数中即可使用。

    2024-02-11
    94

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注