MySQL 5.5版本的两个执行引擎

news2024/10/5 13:17:14

目录

    • 执行引擎引入
    • MySQL执行引擎生成的文件
    • MyIsam
    • InnoDB
    • 聚簇索引与非聚簇索引
    • 稀疏索引
    • 回表
    • 覆盖索引

 

执行引擎引入

我们真正的索引结构要去落地的时候呢,也就是MySQL底层B+Tree数据结构要去落地的话,那么一定要和我们的存储引擎相结合。接下来我们会说MySQL 5.5版本的两个执行引擎,一个是5.5之前的MyISAM一个5.5之后的InnoDB,而我们结合着索引本身的数据结构和MySQL数据库生成的文件去理解。

MySQL本身形成的数据文件分为表数据文件和用户文件两种。我们可以执行
 

show variables like 'datadir'

 
来查询数据存放的位置

 
 

MySQL执行引擎生成的文件

我们创建两个表
一个是my_table_innodb 执行引擎是InnoDB
一个是my_table_myisam 执行引擎是MyIsam

当他们设置的存储引擎不同,MySQL形成的表的文件也不同
innoDB索引形成的两个文件是 my_table_innodb.frmmy_table_innodb .idb
my_table_myisam 形成的三个文件是 my_table_myisam.frmmy_table_myisam.MYImy_table_myisam.MYD
 
在这里插入图片描述
 
其中都有 .frm 文件,不同的是innoDB存储引擎产生的文件叫 idb ,而myisam形成的文件叫 MYI 和 MYD。这个.frm 文件我们可以简单理解为记录我们表结构的文件,比如字段和字段长度之类的

MyIsam

比如我们创建一个User表,建立一个主键id,首先会去user.myi中去开辟一个空间,去存放索引的结构。当我们执行
 

 select * from user where id = 12345

 
这个时候,会从我们的user.myi(index),中去找,最终找到了在叶子节点数据区中返回一个磁盘的地址值,然后这个磁盘的地址值会去指向我们真正数据的位置,也就是指向user.myd(data)文件中记录的位置。所以说,MyISAM中的索引的数据结构和数据文件是分开的。user.myi(index)和user.myd(data)。
 
在这里插入图片描述 

所以Myisam执行引擎中,不管我们在表中建立的是主键索引还是非主键索引,我们所有的数据内容都存放在myd文件里面存储,所有的索引结构全部都在myi文件里面存储。细节和上面的一样。
 
 

InnoDB

接下来,我们来看一看,我们的InnoDB执行引擎使用B+Tree的一个落盘操作。

我们还是针对user表,建立主键id,MySQL会在我们的idb文件中去开辟一个空间去存放我们B+Tree的数据结构。但是InnoDB与我们MyISAM存储引擎相不同的在哪里呢?

当我们的innodb里面我们执行
select * from user where id =12345

它一样通过B+Tree的数据结构,在我们的idb文件中去找叶子节点数据区,但是不一样的是,在我们的MyISAM执行引擎中,拿到叶子节点数据区后拿到的磁盘地址值,指向的是我们myd文件中真正的数据位置进行返回。但是innodb执行引擎中,叶子节点数据区挂载的是真正的行记录,我们可以理解为我们user表中一行一行的记录。也就是如果我们执行上面的SQL,直接在idb索引文件中找,然后在叶子节点数据区找到之后,直接返回。

在这里插入图片描述
所以,InnoDB执行引擎把数据文件和索引文件都放到了ibd文件中。上述是针对InnoDB建立主键索引id的。

而接下来我们建立非主键索引name.
如果我们建立非主键索引,首先一样会在我们的idb文件中开辟一个空间去存放非主键索引的数据结构,但是与主键索引不同的是,我们在InnoDB执行引擎中,建立非主键索引的时候,在我们B+Tree数据结构中叶子节点的数据区,挂载的不是行记录,而是当前建立索引的值name和主键的值id,然后拿到这个主键值id,再去我们主键的索引树中去找行记录,过程与主机索引过程一样。

所以这也就引申出了另外几个概念:聚簇索引与非聚簇索引。
 
 

聚簇索引与非聚簇索引

在我们的InnoDB执行引擎中,只有主键是聚簇索引,其他索引都是非聚簇索引。这个原因在于,在InnoDB执行引擎中,只有主键索引叶子节点数据区挂载的是真正的行记录。
 
 

稀疏索引

还有一个概念是稀疏索引。
稀疏索引说白了就是我们MyISAM存储引擎在索引结构就是一个稀疏索引,不管我们MyIsam的主键索引和非主键索引都是稀疏索引,InnoDB的非主键索引也是稀疏索引

因为他们在索引结构上面,给我们提供的信息是辅助我们真正想要找到的内容的信息的。
 
 

回表

什么叫回表?
如果使用我们的非主键索引,非聚簇索引,去叶子节点数据区挂载的主键id,再去查询一遍主键的索引树,根据主键索引拿到我们真正想要的内容,就是我们的回表操作,回表操作一定查了辅助索引和主键索引,查找了两颗B+Tree。
 
 

覆盖索引

覆盖索引指通过索引信息就可以返回所查询的列,称为查询SQL的覆盖索引。我们通过非主键索引在叶子节点的数据区能够直接拿到我们所想要的内容并返回,不用产生回表操作,不用通过id再去查询主键索引树,只要查找一颗树,一颗树比两颗树快,这就是为什么覆盖索引能够加快我们查询速度的原因,这也是为什么我们在写SQL语句的时候想查什么就写什么,而不要使用select * 。

 
 
问题:

为什么InnoDB执行引擎要求一定要建立主键索引?
因为InnoDB引擎中,主键是聚簇索引。因为我们要把MySQL中所有的行记录挂载到索引叶子节点数据区中,这个时候,如果我们不建立索引,资源就没地方挂载了,而我们我们确实没有建立主键索引,MySQL会帮你自动建立一个隐藏索引,而这个隐藏索引是int类型 6byte ,而如果我们自己去建立索引,int 4byte ,所以浪费了资源。
而如果是隐藏主键,在我们的事务中实现隔离性的LBCC , 我们更新数据,这里会导致行锁升级为表锁。

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

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

相关文章

【游戏逆向】老飞飞怀恋魅力爱玩等老飞飞瞬移分析代码

【游戏逆向】老飞飞怀恋魅力爱玩等老飞飞瞬移分析代码 在游戏中,每个人物都有一个坐标。x坐标和y坐标。老飞飞也一样,可能有些朋友用ce找到当前的人物坐标。然后修改坐标就能达到瞬移到效果。不过有些老飞飞是无法实现的。只要瞬移就会掉客户端。今天就…

3>2,看看U.3升级了啥

关注企业级NVMe SSD的小伙伴对U.2接口一定不会感到陌生。然而,在U.2之外,还存在一种名为“U.3”的硬盘接口,二者外观完全相同,接口性能也都一样,甚至不少客户直接将U.3的NVMe SSD部署在U.2服务器上使用。但既然3&#…

分布式应用解决方案之一致性Hash

什么是一致性Hash 一致性Hash就是将整个hash值空间按照顺时针方向形成一个虚拟的环,整个环状结构就称之为Hash环。那为什么叫做一致性Hash环?一致性是由于Hash环应用场景一般在分布式应用服务中,各个服务提供者分布在hash环中,当某…

【Qt】一文总结新工程的创建

文章目录一、导读二、浅谈开发方式(2-1)C开发方式(2-2)QtQuick qml开发方式(2-3)python开发方式三、新工程创建向导下的Library四、其他项目五、其他工程项目六、Import Project选项七、总结一、导读 在使…

Linux-Find命令

目录 Find 命令格式: 常用查找条件 案例展示: Find find 命令根据预设的条件递归查找文件或目录所在位置 命令格式: 命令格式:find 查找路径 查找条件1 查找条件2 .. [-exec 处理命令 {} \; ] –exec 可接额外的命令来处理查…

【Kubernetes 企业项目实战】03、基于 Alertmanager 发送报警到多个接收方(下)

目录 一、promethues 采集 tomcat 监控数据 1.1 制作 tomcat 镜像 1.2 基于上面的镜像创建一个 tomcat 实例 1.3 采集数据 二、promethues 采集 redis 监控数据 2.1 配置一个 Redis 的 exporter 2.2 查看 Prometheus 2.3 grafana 导入模板 三、Prometheus 监控 mysql …

【微服务】Nacos 前端设计

目录 一、背景 二、选型 React 1、Vue vs React vs Angular 1.1、npm trends 2、GitHub Stats 3、根据自身情况选型 4、现状 5、小结 6、React/Vue ⽣态 三、方案 💖微服务实战 💖 Spring家族及微服务系列文章 一、背景 我们需要提供⼀个简单…

Xilinx关于Aurora IP核仿真和使用

平台:vivado2017.4芯片:xc7k325tfbg676-2 (active)关于Aurora的开发学习。使用xilinx官方提供的IP核。官方资料,pg046-aurora-8b10b.pdf和pg074-aurora-64b66b-en-us-12.0.pdf。IP核的生成步骤首先在IP Catalog中搜索Aurora IP核关于此IP有两…

SpringBoot指标监控

目录 一、SpringBoot Actuator 1、简介 2、1.x与2.x的不同 3、如何使用 二、Actuator Endpoint 1、最常使用的端点 2、Health Endpoint 3、Metrics Endpoint 4、管理Endpoints 1、开启与禁用Endpoints 2、暴露Endpoints 三、定制 Endpoint 1、定制 Health 信息 2…

RepPoints原理与代码解析

paper:RepPoints: Point Set Representation for Object Detectioncode:https://github.com/microsoft/RepPoints背景在目标检测中,包含图像矩形区域的边界框bounding box作为处理的基本元素,贯穿整个检测流程,从ancho…

DevOps利器之一Docker

一、背景本篇文章主要阐述Docker在DevOps中的应用与价值,Docker部署与安装;因为搭建DevOps流程中所应用的工具及框架都部署到Docker,所以首先介绍Docker为后续做准备。Docker的主要目标是Build,Ship and Run Any App,Anywhere&…

Jitpack使用指南:maven-publish如虎,jitpack如翼 【安卓Java组件化模块化】【更多gradle技巧】

上文总结了三种多模块开发的方法。 第一种:在setting.gradle中定义子模块然后 api Project(:...),直接引用 。第二种,使用 maven-publish 部署至本地仓库第三种,使用 jitpack.io 等部署至远程服务器 我的第一个开源项目就依次用…

Mysql之增强查询

增强查询主要是对之前一些指令的补充 查询增强 主要针对单表查询的增强操作,也是上面一些细节的补充 -- 使用where语句 -- 查找1991.1.1后入职的员工 -- 主要是介绍在mysql中日期类型可以直接比较,需要注意格式 SELECT * FROM empWHERE hiredate &g…

【异常】记一次因修复漏洞扫描导致SpringSecurity出现的循环依赖问题

一、循环依赖问题 APPLICATION FAILED TO START Description: The dependencies of some of the beans in the application context form a cycle: ┌─────┐ | springSecurityConfig (field private XXXX.config.MyauthenticationProvider XXXX.config.SpringSecurityC…

十五天学会Autodesk Inventor,看完这一系列就够了(十),凸雕、贴图

众所周知,Autocad是一款用于二维绘图、详细绘制、设计文档和基本三维设计,现已经成为国际上广为流行的绘图工具。Autodesk Inventor软件也是美国AutoDesk公司推出的三维可视化实体模拟软件。因为很多人都熟悉Autocad,所以再学习Inventor&…

springcloud alibaba -- seata原理和使用

文章目录一、认识Seata1.1 Seata 是什么?1.2 了解AT、TCC、SAGA事务模式?AT 模式前提整体机制如何实现写隔离如何实现读隔离TCC 模式Saga 模式Saga 模式适用场景Saga 模式优势Saga 模式缺点二、Seata安装2.1 下载2.2 创建所需数据表2.2.1 创建 分支表、全局表、锁表2.2.2 创建…

内存一致性模型概念

phrase-20230117184107 内存一致性模型(Memory Consistency Models)提供内存一致性保证,一致性结果体现在程序内存操作是可预测的。例如在多核或多处理器硬件上,在编写并行的程序时,如果理解当前系统所使用的一致性模型,有助于使…

OpenStack GPU直通服务器

layout: post title: OpenStack GPU直通服务器 catalog: true tag: [OpenStack, GPU] 1. 概述2. 直通GPU特性3. 功能说明 3.1. 操作系统支持3.2. 设备支持 4. 实现方案5. 部署方案 5.1. 示例环境说明5.2. 上线步骤 5.2.1. 硬件安装5.2.2. GPU计算节点主机配置 5.2.2.1. IOMMU设…

【数据结构与算法学习8】二叉查找树的基本介绍与添加数据的过程

程序员语录: 把时髦的技术挂在嘴边,还不如把过时的技术记在心里。 1 二叉查找树是什么? 二叉查找树是一种数据结构,又叫作二叉搜索树或二叉排序树,采用了图的树形结构,数据存储于二叉查找树的各个结点中,每…

GEE 9:Earth Engine Reducers 的基本操作

目录1.Image 、ImageCollection and Regions Reducers(图层和区域的相关操作)1.1 Image Reductions(处理单个图层)1.2 ImageCollection Reductions(处理图层集)1.3 Greenest pixel (maximum NDVI) composit…