mysql索引数据结构

news/2024/7/6 20:04:50/文章来源:https://www.cnblogs.com/snailFly-95/p/18275785

一、索引

1. 什么是索引

索引是帮助MySql高效获取数据的排好序数据结构

2.索引的数据结构

① 二叉树(Binary tree)

定义:是一棵由一个根节点和两棵互不相交的,分别称作根的左子树和右子树组成的非空树。

特点:左子树小于父节点的值,右子树大于父节点的值。

 

缺点:当列的值是自增时,会出现单边树,退化成链表结构。(故mysql没有采用该数据结构)

 

② 红黑树

平衡二叉树,解决了二叉树树里面的单边退化成链表的问题。

缺点:如果针对海量数据时,树的高度不可控。查询的性能也提升不明显。(故mysql没有采用该数据结构)

 

③ Hash表(mysql支持)

特点:1. 对索引的key进行一次hash计算就可以定位出数据存储的位置

   2. 很多时候Hash索引要比B+ 树索引更高效(例如 =,in )

   3. 不支持范围查询

   4. hash冲突问题

 

④ B-Tree

特点:1. 叶节点具有相同的深度,叶节点的指针为空

   2. 所有索引元素不重复

   3. 节点中的数据索引从左到右递增排列

为什么mysql没有采用B-Tree?

1. 非叶子节点可以存放的索引数据少,比如,要控制在树高度为三层的情况下,存放不了太多数据。

2. 范围查询的效率低。

B+Tree(MYSQL采用的数据结构,当然不是最原生的B+树,还是做了一些优化后的B+树)

特点: 1. 非叶子节点不存储data,只存储索引(冗余),可以放更多的索引

    2. 叶子节点包含所有索引字段

    3. 叶子节点用双向指针连接,提高区间访问的性能

数据结构描述:1. 通过冗余索引设计,以上图为例,假如三层高度树,第三层存放的整张表的所有索引和数据。

       2. 第二层存放的是第三层每页数据的最小的索引,第一层又是从第二层的页索引数据中提取最小的进行冗余。

3.索引的分类:

① 聚簇索引(叶子节点包括完整的数据记录,索引和数据)

例如: INNODB的主键索引树

② 非聚簇索引(索引和数据是分开的)

例如:MYISAM的主键索引树、INNODB二级索引

③ 主键索引(一张表只有一个主键索引)

④ 二级索引(非主键索引)

⑤ 联合主键索引(唯一)

⑥ 联合辅助索引(可以不唯一)

二、存储引擎

MySQL表文件都是存放在磁盘中的。存储引擎作用的维度是表。

1. MYISAM

在磁盘中存放的是三个文件,分别为:xxx.frm(表结构)、xxx.MYD(数据)、xxx.MYI(索引)

2. INNODB

在磁盘中存放的是两个文件,分别为:xxx.frm(表结构)、xxx.ibd(数据加索引)

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

字典树

字典树 它是一个快速插入和查询的多叉树 支持字符串的操作 支持查询和插入 使用边来标记我的字母 它的路径代表着这个字符串 比如1 2 6 11这条路径的意思就是字符串aba 如果要插入字符就在应该有的字符串路径插入应该要的字符 Code:#include <bits/stdc++.h>using names…

题目集7~8总结

5-6次大作业难度还算较简单,尤其第五次大作业,可谓是开场小菜,到第六次作业才上了一些难度,而第七次第八次更是难度大大增加,第二轮大作业比起第一轮大作业难度上升了不少,运用到的东西更新,更先进,所涉及的思维设计,逻辑框架也更难,还有其计算的设计也会很复杂很难。…

项目微服务化

记得不久之前,我曾经计划将本项目改造成微服务的形式,原因在于探索了Graal VM以后,我发觉曾经梦想的将自己的项目微服务化并不是一个天方夜谭,而是一些切实可行的,只需要工作量堆砌的事情。于是这段时间我就集中精力把这件事情做了一下。但是实际做完的感觉尽管非常舒心,…

内网穿透之frp+proxifier实现socks5反向代理

frp是一个专注于内网穿透的高性能的反向代理应用,proxifier允许用户将网络应用程序通过代理服务器进行连接。目录前言环境搭建frp反向代理proxifier代理工具 前言内网穿透,代理技术的联系与区别?我个人感觉在内网渗透的时候它们之间的界限很模糊,其目的都是为了突破内网访问…

笔记本电脑的电源计划

电池保留电池电量 保留电池电量使用电池:7%接通电源:7%"保留电池电量"通常是指设备为了延长电池整体寿命而采取的一种策略,比如在电池充电时不会充满至100%,而是维持在一个较低的安全水平(例如93%),以减少电池的高压力状态,这是一种电池维护功能。 关键级 关…

Web应用课 3.1 JavaScript——变量与运算符、输入输出、判断、循环

JS的调用方式与执行顺序 使用方式 HTML页面中的任意位置加上<script type="module"></script>标签即可。 常见使用方式有以下几种:直接在标签内写JS代码。 直接引入文件:<script type="module" src="/static/js/index.js">&…

综述 | 农业大模型:关键技术、应用分析与发展方向

分享一篇农业大模型综述。 官网全文免费阅读知网阅读农业大模型:AI领域的新热点 农业大模型,基于Transformer架构,通过自监督学习方法,在大规模数据上进行训练,展现出了卓越的通用能力和强大的下游任务适应性。这些模型不仅能够处理复杂的关联表示,还在多模态信息处理等方…

[算法学习笔记] 可持久化栈

可持久化栈前置知识 可持久化,即对于每次更改,我们都期望记录它的历史信息。容易进行可持久化的数据结构通常满足 修改数据结构是,数据结构本身的拓扑序没有改变。,即形态没有改变。例如线段树,Trie 树,数组都可以容易地进行可持久化。 可持久化线段树前面已经讲过,见 算…

Windows Terminal 自定义 SSH 连接

我们在远程操作Linux主机时常常会使用各种Remote SSH工具,比如最常用的X Shell、MobaXterm。这些工具功能强大,但很多时候只是需要开个终端,Windows 10开始自带的Windows Terminal就不错。 Windows Terminal 是Window 10 以上系统自带的工具,对选项卡、富文本等功能支持不错…

OOP第四次blog

本次blog是本学期的最后一次blog,接下来分析最后一次小结内容的PTA作业。 本次作业分为以下部分: (1)总结三次题目集的知识点、题量、难度等情况。 (2)设计与分析:重点对题目的提交源码进行分析。 (3)采坑心得:对源码的提交过程中出现的问题及心得进行总结。 (4)改…

南昌航空大学第二次blog

本次blog是本学期的最后一次blog,接下来分析最后一次小结内容的PTA作业。 本次作业分为以下部分: (1)总结三次题目集的知识点、题量、难度等情况。 (2)设计与分析:重点对题目的提交源码进行分析。 (3)采坑心得:对源码的提交过程中出现的问题及心得进行总结。 (4)改…

(交换使逆序对数为1+并查集)CF1768D Lucky Permutation

题意:思路: 先从排好序的数组考虑:1,2,3,4,5,...n,如果交换相邻元素,必然使得逆序对数+1。 考虑先将乱序数组变成顺序数组,最后交换任意一对相邻元素即可。 将所有的i与\(p_{i}\)连边,最后形成若干个环,交换次数其实就是边数,也即点数-环数。并查集维护。 注意特殊情…

[C++ Primer] 开始

C++ Primer 第5版中英版电子版pdf开始 C++ Primer 第5版pdf中英版 夸克云盘 百度云盘 提取码:qrjn该系列记录了我在学习C++过程中经常会遗忘和混淆的相关操作语法,以备将来用到时方便查找。 加油吧!!!🙆

【MX-S1】梦熊周赛 提高组 1(同步赛)

【MX-S1】梦熊周赛 提高组 1(同步赛)\(T1\) luogu P10672 【MX-S1-T1】壁垒 \(100pts\)一个简单的结论:随着前缀长度的增长,出现的数字种类数每次只能增加 \(0\) 或 \(2\)。考虑构造时可以从这里下手。一种构造方案是这样的:优先让数字种类数增加 \(2\),即先将原先没有出…

vue学习笔记-2

1.模板语法 文本插值 <template><p>{{ msg }}</p><br/> <p>{{ num+1 }}</p><br/> <p>{{ ok?"yes":"no" }}</p> </template> <script> export default{data(){return{msg:"模板语…

Nginx 站点配置多目录管理

运维需求 在使用Nginx 对多个站点进行配置和运行维护时,如果将多个站点的配置都放在同一配置文件中,对于server 部分的调整,随着时间的推移,可能对应的配置变更是由不同的人员接手,不方便系统的部署和迁移。解决方案 为了解决这个问题,可以考虑使用include 块。用于指定加…

PNAS | 中国农大汪海团队实现转录调控序列的人工智能设计

近日,中国农业大学农学院汪海团队联合美国康奈尔大学、丹麦奥胡斯大学、北京大学现代农业研究院、坦桑尼亚农业科学院等单位在_PNAS在线发表了题为Modeling 0.6 million genes for the rational design of functional cis-regulatory variants and de novo design of cis-regu…

[C++ Primer] 关联容器

C++关联容器相关操作关联容器标准库提供了8个关联容器。类型map和multimap定义在头文件map中;set和multiset定义在头文件set中;无序容器则定义在头文件unordered_map和unordered_set中。pair标准库类型,定义在头文件utility中。关联容器额外的类型别名:关联容器insert操作:…