学习mysql相关知识记录

执行一条select语句,期间发生了什么?

MySQL的执行流程:

  • 连接器
    • TCP连接
  • 查询缓存
    • 很鸡肋被取消
  • 解析SQL
    • 解析器
      • 语法分析
      • 词法分析
  • 执行SQL
    • 预处理器
      • 检查是否存在
      • select * 中的 * 符号,扩展为表上的所有列
    • 优化器
      • 优化器主要负责将 SQL 查询语句的执行方案确定下来
    • 执行器
      • 主键索引查询
      • 全表扫描
      • 索引下推
        • 索引下推(ICP优化)可以减少二级索引在查询时的回表操作,提高查询效率

Mysql的索引

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

索引的数据结构:

  • 二叉树
  • 红黑树
  • Hash表 不支持范围查找
  • B-Tree

二叉树可能变成链表,变成全表扫描了

红黑树二叉平衡树 有自我平衡功能 树的高度太高了 磁盘io太多

B树 :

叶节点具有相同的深度,叶节点的指针为空

所有的索引元素不重复

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

高度为3 的B+树3层可以存大概2千万数据

B+树的非叶子节点占用内存非常少,一般MySQL在启动的时候就将他加载在内存中,因此查询只需一次磁盘io,快的很

存储引擎对应的是表

myisam索引文件和数据文件是分离的

frm表文件

mysql中innoDB的表空间文件结构:

表–>段–>区–>页

每次读取数据都是按页来读取的

B+ 树中的每一层都是通过双向链表链接起来的

在表中数据量大的时候,为某个索引分配空间的时候,就不再按照页为单位分配了,而是按照区为单位分配。每个区的大小为1MB,对于16KB的页来说,连续的64页就被划为一个区,这样就使得链表中相邻的页的物理位置也相邻,这样就可以顺序I/o了

段:是由多个区组成的

一般分为数据段,索引段,回滚段等:

  • 索引段:存放B+树的非叶子节点的区
  • 数据段:存放B+树的叶子节点的区的集合
  • 回滚段:存放回滚数据的区

行的格式:
COMPACT:image-20240501114354802

NULL 是不会存放在行格式中记录的真实数据部分里的

变长字段长度列表:只有数据中有变长字段时才会有

逆序存放 变长字段长度列表:提高CPU Cache的命中率

NULL值列表:
用二进制0 1 来表示 也是逆序的

NULL 值列表也不是必须的。

当数据表的字段都定义成 NOT NULL 的时候,这时候表里的行格式就不会有 NULL 值列表了

记录头信息:

  • delete_mask :标识此条数据是否被删除。从这里可以知道,我们执行 detele 删除记录的时候,并不会真正的删除记录,只是将这个记录的 delete_mask 标记为 1。
  • next_record:下一条记录的位置。从这里可以知道,记录与记录之间是通过链表组织的。在前面我也提到了,指向的是下一条记录的「记录头信息」和「真实数据」之间的位置,这样的好处是向左读就是记录头信息,向右读就是真实数据,比较方便。
  • record_type:表示当前记录的类型,0表示普通记录,1表示B+树非叶子节点记录,2表示最小记录,3表示最大记录

65532

MySQL 的 NULL 值是怎么存放的?

MySQL 的 NULL 值是怎么存放的?MySQL 的 NULL 值是怎么存放的?

varchar(n) 中 n 最大取值为多少?

行溢出后,MySQL 是怎么处理的?

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

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

相关文章

LeetCode 198—— 打家劫舍

阅读目录 1. 题目2. 解题思路3. 代码实现 1. 题目 2. 解题思路 此题使用动态规划求解,假设 d p [ i ] [ 0 ] dp[i][0] dp[i][0] 代表不偷窃第 i i i 个房屋可以获得的最高金额,而 d p [ i ] [ 1 ] dp[i][1] dp[i][1] 代表偷窃第 i i i 个房屋可以获…

Bluetooth Profile 蓝牙协议栈总结

GAP-Generic Access Profile 控制设备广播和连接 GAP profile 的目的是描述: Profile rolesDiscoverability modes and proceduresConnection modes and proceduresSecurity modes and procedures 设备连接过程 LE中GAP有4种角色:BroadcasterObserv…

关于npm命令

我们知道nodejs安装后,用npm命令来安装管理依赖包,npm默认源是https://registry.npmjs.org 国内访问可能不够快,所以大家一般会配置使用国内镜像源,比如https://registry.npmmirror.com ,这样可能访问和下载会快一些。…

RTMP 直播推流 Demo(二)—— 音频推流与视频推流

音视频编解码系列目录: Android 音视频基础知识 Android 音视频播放器 Demo(一)—— 视频解码与渲染 Android 音视频播放器 Demo(二)—— 音频解码与音视频同步 RTMP 直播推流 Demo(一)—— 项目…

vue计算属性是什么 怎么选择?

写在computed对象中的属性,本质上是一个方法,不过使用时依旧当属性来使用 虽然模板语法使用非常便利,但是它是被设计成用于简单运算的。在模板中放入太多的逻辑会让模板过重且难以维护 无论计算属性还是methos,这两种实现方式的…

抽象类和接口的区别你知道吗

抽象类和接口是Java中两种重要的机制,它们都用于实现多态性和代码的灵活性,但在某些方面有着不同的特点。下面我将详细介绍抽象类和接口的区别,并通过示例进行说明。 抽象类(Abstract Class) 定义: 抽象类…

暴雨服务器引领信创算力新潮流

去年大模型的空前发展,人工智能也终于迎来了属于自己的“文艺复兴”,众多的模型相继发布,继而催生了整个行业对于智能算力需求的激增。 市场需求与技术驱动仿佛现实世界的左右脚,催动着世界文明的齿轮向前滚动。在全球经济角逐日…

力扣:61. 旋转链表(Java,双指针)

目录 题目描述:输入:输出:代码描述: 题目描述: 给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。 输入: head [1,2,3,4,5], k 2 输出: [4,5,1,…

Win系统常用操作

文章目录 1、常用快捷键 1、常用快捷键 锁屏:WinL截屏:WInShiftS新建文件夹:CtrlShiftN关闭程序:CtrlW放大/缩小页面:Ctrl加号/减号最小化当前窗口:Alt空格N返回桌面:WinD(再次按Wi…

linux高性能服务器--定长内存池设计

内存池 内存池是指程序预先从操作系统申请一块足够大内存,此后当程序中需要再次申请内存的时候,直接从内存池中获取;当程序释放内存的时候,是返回给内存池保管。 开源内存池: tcmalloc 功能: 避免频繁分…

扒开kafka内部组件,咱瞅一瞅都有啥?

Apache Kafka 是一个分布式流处理平台,主要用于构建实时数据管道和流式应用程序。它由几个核心组件组成,这些组件共同工作以提供高吞吐量、持久性、容错性和可扩展性。关于 Kafka 与其它类似的中间件的对比,这里V 哥就不再阐述了,…

leetcode-滑动窗口的最大值-95

题目要求 思路 1.这个题是可以暴力求解的,但是时间复杂度比较高,因此,这里说一个时间复杂度为O(n)的方法 2.因为这个代码是优化后的结果,第一次写如果直接写成这样着实不容易,因此,我直接讲每一行的含义。…

Linux系统应用与设置(1):比较、生成补丁以及应用补丁(diff与patch指令)

1. 简述 在我们应用Linux系统或基于Linux系统做一些软件应用开发时,经常会遇到需要将文件的改动记录下来,并且讲这些改动和差异应用到其他的Linux系统时,我们会用到diff和patch指令。 在Linux中,diff和patch是两个非常有用的命令行…

【网络基础】深入理解TCP协议:协议段、可靠性、各种机制

文章目录 1. TCP协议段格式1.1. 如何解包 / 向上交付1.1.1. 交付1.1.2. 解包 1.2. 如何理解可靠性1.2.1. 确认应答机制(ACK)1.2.2. 序号 与 确认序号 2. TCP做到全双工的原因2.1. 16位窗口大小2.2. 6个标记位 3. 如何理解连接3.1 连接管理机制3.1.1. 三次…

44. UE5 RPG 初始化敌人的属性

在正常的游戏中,我们应该考虑如何去初始化角色属性,并且要给角色分好类型。比如,在我们游戏中,我们如何去初始化小兵的属性,并且还要实现小兵随着等级的增长而增加属性。而且就是小兵也有类型的区分,比如我…

【数组】Leetcode 26. 删除有序数组中的重复项【简单】

删除有序数组中的重复项 其他算法导航栏 给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。 考虑 …

【C++STL】String类的常用函数用法总结

String类 一:String类的初始化方式二:String类的访问方式三:String的大小和容量四:string的插入:push_back() 和 insert()五:string拼接字符串:append() & 操作符六: string的删…

PhpAdmin-getshell

PhpAdmin-getshell 通过未授权成功写入,然后getshell 路径:C:\phpstudy_pro\Extensions\MySQL5.7.26\ 写入木马: into写入文件: 使用需看要secure_file_priv的值。 当value为“null”时,不允许读取任意文件 当value为…

Android 文件传输

经常写adb命令传文件,结果发现Android studio有自带的文件管理器,可以上传下载文件。

高扬程消防水泵在火灾中的关键作用/恒峰智慧科技

在火灾这一无情的灾难面前,每一秒都至关重要。而在这一分一秒的较量中,高扬程消防水泵无疑扮演着举足轻重的角色。它不仅是灭火战斗的得力助手,更是保障人民生命财产安全的守护神。 高扬程消防水泵,顾名思义,其扬程远超…