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

MySQL 底层原理(面试精华) 目录1 MySQL架构1.1 架构图1.2 SQL语句执行流程2 存储引擎2.1 查看存储引擎2.2 设置存储引擎2.3 文件存储结构对比2.4 InnoDB 与 MyISAM 的比较3 数据类型3.1 CHAR 和 VARCHAR 的区别3.2 BLOB和TEXT区别4 索引4.1 定义4.3 索引的基本语法4.3 索引的优缺点4.4 MySQL索引分类4.5 B-Tree 和 B+Tree 的区别4.6 MySQL索引结构4.6.1 MyISAM主键索引与辅助索引的结构4.6.2 InnoDB主键索引 阅读详情

微信公众号:Java患者
专注Java领域技术分享

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+树的数据结构。

MySQL索引底层数据结构及原理深入分析 为什么加索引就查的快了?索引到底是什么? 阅读详情

相关推荐

小米路由器R1D进阶玩法:MIXBOX工具箱安装与插件管理指南

本文详细介绍了为小米路由器R1D安装MIXBOX工具箱的完整指南。通过开启SSH、执行一键安装脚本,用户可以轻松解锁路由器的进阶功能,如安装离线下载、内网穿透等插件,从而将旧设备转变为强大的家庭网络服务中心。

weixin_29292431的博客 1110

深入理解Mysql索引底层原理(看这一篇文章就够了)

Mysql 作为互联网中非常热门的数据库,其底层的存储引擎和数据检索引擎的设计非常重要,尤其是 Mysql 数据的存储形式以及索引的设计,决定了 Mysql 整体的数据检索性能。

专注自动化、性能测试、测试架构学习交流 6720

macOS安装Cplex+yalmip

macOS安装Cplex+yalmip

DS 4247

MYSQL索引的底层实现原理

1 索引的本质 索引(Index)是帮助MySQL高效获取数据的数据结构,为什么需要需要特定的数据结构呢?首先,顺序查找这种复杂度为O(n)的算法在数据量很大时显然是糟糕的,更优秀的查找算法,比如二分查找(binary search)、二叉树查找(binary tree search),我们会发现每种查找算法都只能应用于特定的数据结构之上,但是数据本身的组织结构不可能完全满足各种数据结构,所以,在...

孟庆云的博客 5375

Ansys Zemax与Speos协同设计:HUD系统从光学优化到驾驶视觉验证全流程解析

本文详细解析了如何利用Ansys Zemax与Speos协同工作流,完成HUD系统从光学内核优化到驾驶视觉验证的全流程。通过Zemax进行精密光学设计与像差校正,再通过Speos进行HOA定量分析和虚拟驾驶舱仿真,实现了数据无损流转与验证闭环,有效解决了光学性能与视觉感知脱节的核心问题,显著提升HUD设计效率与可靠性。

git9versioner的博客 527

QuickFix Java 讲解(五)消息的收发与查看

本系列力求手把手教你怎样利用QuickFix Java 搭建自己的 FIX 协议收发平台,以及其中的注意事项。 所有源码的地址(免费): https://github.com/zongzhec/QuickFixPractise 这节我们讨论将Acceptor和Initiator启动以后,收到的消息极其查看方式。 6. 收发双方的通信 6.1. 启动后的通信和登录 为方便起见,这里我们使用统一的源码:https://github.com/zongzhec/QuickFixPractise ..

2245

MYSQL索引底层原理

MYSQL索引底层原理

winy1986的博客 3862

BMW Trojan 样本分析

仅用于链接已经删却但是需要方便查阅的原文http://blog.youkuaiyun.com/zirconsdu/article/details/7997470 转载请注明出处http://blog.youkuaiyun.com/zirconsdu/article/details/8153813。 一些具体数据结构和具体路径隐去。   BMW木马样本分析 摘要 2011年底和某Hunter的谈话涉及到当时新检

zirconsdu的专栏 3910

Mysql索引底层原理详细讲解

主键索引是一种按照某列的唯一值进行排序的数据库索引结构。简单来说,主键索引是用来快速定位数据记录的工具,它能够保证每一行数据在索引列上都有唯一标识,这样可以加快查询速度,提高数据库的性能。

上官花雨滴博客!!! 1883

【智能流体力学】使用ANSYS Fluent + SpaceClaim + SCDM制作流体力学前处理的几何模型

生成来源.scdoc文件来自前处理工具生成的模型数据,或在 FLUENT 中创建和保存的模型。生成方式: 通过前处理工具导出网格数据,或在 FLUENT 中设置并保存模型。作用: 用于储存模型的结构信息和设置,确保在 FLUENT 中的正确导入和使用。.x_t文件是 Parasolid 文件格式的扩展名,用于存储三维模型数据。在 ANSYS Fluent 中,这种格式通常用于在前处理工具之间交换几何数据。要创建.x_t。

源代码杀手的博客 3265

第五节_PySide6基本窗口控件_主窗口和标签

本文介绍了PySide6中主窗口和标签控件的使用。主要内容包括: 窗口控件分类: QWidget是基础窗口部件,可作为独立窗口或子部件 QMainWindow提供标准应用程序框架,包含菜单栏、工具栏等 QDialog用于对话框,支持模态交互 主窗口创建: 演示了如何创建QMainWindow子类 实现了窗口居中、设置图标、状态栏等功能 提供了窗口几何信息的获取方法 QLabel标签控件: 继承自QFrame类 用于显示文本或图像 文章通过代码示例详细说明了主窗口的创建和使用方法,包括位置控制、图标设置等常见

su桥木的博客 1020

mysql索引实现原理_MySQL索引底层(一)索引底层原理

微信公众号:Java患者专注Java领域技术分享MySQL索引底层原理局部性与页在操作系统中,我们执行一个指令去磁盘取数据,那么他会从磁盘取出4KB数据,这个4KB就是一个局部单位,而这4KB数据就是你的指令中取出的数据周围的数据,因为操作系统认为你下一次的数据会从这条数据的周围中取。每次从磁盘读取数据在这里称为一次磁盘IO。那么在Mysql的操作当中,也有这么一个原理。数据结构现在我们...

weixin_39727976的博客 69

ScanNetV2 数据集讲解和选择性下载

写在前面的话: 不可转载!!!!!!!!!!!! ScanNetV2一共1.2T,数据太大本文会简单讲解如何下载自己想要的文件,并附上修改后的下载程序 ScanNetV2:http://www.scan-net.org/ 简介 ScanNetV2的作者是斯坦福大学的博士,其团队通过收集RGB-D的视频序列,通过ipad应用加深传感器而收集的,然后视频会被上传到服务器,并被自动重建。然后,视频会被给到亚马逊 Mechanical Turk,将标注工作众包出去。ScanNetV2是RGB-D数据集,.

qq_35781447的博客 2万+

Mysql 索引(一)—— 主键索引的底层原理

Mysql 索引(一)—— 主键索引的底层原理

challenglistic的博客 1697

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

聊一聊mysql——索引底层原理

说到索引,我们在上一篇文章里面早就介绍过,mysql的数据底层全是存储在磁盘中间的,而且不同的存储引擎可能有不同的索引存储方式。我们就来简单了解了解索引的底层原理。 因为是在磁盘,所以避免不了要先了解磁盘的基础,而且我们要知道频繁的从磁盘IO会有很大的时间开销,而且mysql数据大时,怎么保证根据索引查询的索引非常快,这是一个很重要的问题 磁盘存储知识 目前计算机...

weixin_43272605的博客 982

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Mysql底层索引原理(一)索引数据结构

顶顶顶

qq826303461的博客 266

[MySQL索引]2.索引的底层原理(一)

索引的底层原理,介绍了B-树索引以及B+树索引,并分析了B+树索引对B-树索引的优化

下酒番陪绅士的博客 167

MySQL一共有哪些索引类型?使用场景是什么?底层原理是什么?

主键索引用于唯一标识记录,唯一索引用于防止重复,普通索引用于加速查询,全文索引用于大段文本搜索,组合索引用于多条件查询,空间索引用于地理信息查询,哈希索引用于快速定位数据。B+树是一种平衡树,它的特点是所有数据都存储在叶子节点,并且叶子节点之间通过指针连接,方便范围查询。主键索引和普通索引基于B+树,全文索引基于倒排索引,哈希索引基于哈希表,空间索引基于R树或四叉树。主键索引、唯一索引、普通索引、全文索引、组合索引、空间索引、哈希索引。用于地理信息查询,比如查找附近的餐厅。用于快速定位数据,适合等值查询。

长风破浪会有时的博客 1177

mysql 取第一条_MySQL索引底层(一)索引底层原理

微信公众号:Java患者专注Java领域技术分享MySQL索引底层原理局部性与页在操作系统中,我们执行一个指令去磁盘取数据,那么他会从磁盘取出4KB数据,这个4KB就是一个局部单位,而这4KB数据就是你的指令中取出的数据周围的数据,因为操作系统认为你下一次的数据会从这条数据的周围中取。每次从磁盘读取数据在这里称为一次磁盘IO。那么在Mysql的操作当中,也有这么一个原理。数据结构现在我们...

weixin_39772388的博客 121

MySQL底层原理细讲(一) - 索引底层数据结构和算法

MySQL底层原理细讲(一) - 索引底层数据结构和算法 MySQL底层原理细讲(二)- MySQL存储引擎 MySQL底层原理细讲(三)- Explain详解 MySQL底层原理细讲(四)- 索引优化详解 MySQL底层原理细讲(五)- MySQL事务与锁 MySQL底层原理细讲(六)- MVCC&日志&BufferPool MySQL底层原理细讲(七)- MySQL表结构设计规范 ...

qq_43783527的博客 871

Mysql索引底层原理(一)(二叉树、红黑树、B树、B+树)

Mysql索引底层原理(一)(二叉树、红黑树、B树、B+树) 对于有千万行记录的数据表,查询速度和效率愈发重要,这直接影响到用户的体验。讲解Mysql索引底层原理之前,先来聊聊二叉树、红黑树、B树、B+树。 (1)二叉树 相信有些许数据结构的小伙伴们对二叉树都有了解,其具体结构如下: 当采用二叉树作为索引时,并且把id作为索引并且id自增长时一个二叉树变成了一个单枝树,相当于链表查询,查询时间为...

Java技术大联盟 2195

MySQL索引的底层原理详解

MySQL索引的底层原理基于B+树结构,这种结构通过平衡树的深度和有序存储,提供了高效的查询性能。InnoDB存储引擎的聚集索引和二级索引设计,进一步优化了数据存储和检索效率。理解这些原理,有助于在实际工作中优化数据库性能,提高查询效率。希望本文能够帮助读者深入理解MySQL索引的底层原理,并在实际应用中进行有效的性能优化。

MrxiaoAXiao的博客 806

MYSQL最左匹配原则及其底层逻辑

最左优先,以最左边的为起点任何连续的索引都能匹配上。同时遇到范围查询(>、

jixiaoyaojing的博客 3990

mysql enmu 底层

MySQL Enum 类型底层解析 MySQL 是一种流行的关系型数据库管理系统,它提供了许多数据类型来存储不同类型的数据。其中,ENUM 是一种特殊类型,用于存储一组预定义的值。在本文中,我们将探讨 MySQL ENUM 类型的底层实现,并展示如何使用它。 流程图 首先,让我们通过一个流程图来了解 ENUM 类型的基本使...

weixin_34589862的博客 159
上一篇: JAVA面试锦囊(九)
下一篇: the server responded with a status of 502 (Bad Gateway)
新时代Java农民工
博客等级 码龄7年 16粉丝 116原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值