MySQL数据库学习笔记之存储引擎

news2024/11/13 11:25:36

存储引擎

MySQL体系结构

在这里插入图片描述

  • 连接层

    • 最上层是一些客户端和连接服务,主要完成一些类似于连接处理、授权认证、以及相关的安全方案。服务器也会为安全接入的每个客户端验证它所具有的操作权限。
  • 服务层

    • 第二层架构主要完成大多数的核心服务功能,如SQL接口,并完成缓存的查询,SQL的分析和优化,部分内置函数的执行。所有跨存储引擎的功能也在这一层实现,如存储过程、函数等。
  • 引擎层

    • 存储引擎真正的负责了MySQL中数据的存储和提起,服务器通过API和存储引擎进行通信。不同的存储引擎具有不同的功能,这样我们可以根据自己的需要,来选取合适的存储引擎。
  • 存储层

    • 主要是将数据(如: redolog、undolog、数据、索引、二进制日志、错误日志、查询日志、慢查询日志等)存储在文件系统之上,并完成与存储引擎的交互。

存储引擎简介

和其他数据库相比,MySQL有点与众不同,它的架构可以在多种不同场景中应用并发挥良好作用。主要体现在存储引擎上,插件式的存储引擎架构,将查询处理和其他的系统任务以及数据的存储提取分离。这种架构可以根据业务的需求和实际需要选择合适的存储引擎。

存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式。存储引擎是基于表的,而不是基于库的,所以存储引擎也可被称为表类型。我们可以在创建表的时候,来指定选择的存储引擎,如果没有指定将自动选择默认的存储引擎。

建表时指定存储引擎:

CREATE TABLE 表名(
字段1 字段1类型 [ COMMENT 字段1注释 ] ,
......
字段n 字段n类型 [COMMENT 字段n注释 ]
) ENGINE = INNODB [ COMMENT 表注释 ] ;

InnoDB

介绍:InnoDB是一种兼顾高可靠性和高性能的通用存储引擎,在MySQL 5.5 之后,InnoDB是默认MySQL的存储引擎。

特点:

  • DML操作遵循ACID模型,支持事务
  • 行级锁,提高并发访问性能
  • 支持外建 FOREIGN KEY 约束,保证数据的完整性和正确性。

文件:xxx.idb: xxx代表的是表名,InnoDB引擎的每张表都会对应这样一个表空间文件,存储该表的表结构(frm-早期,sdi-新版8.0)、数据和索引。

在这里插入图片描述

  • 表空间 : InnoDB存储引擎逻辑结构的最高层,ibd文件其实就是表空间文件,在表空间中可以包含多个Segment段。
  • : 表空间是由各个段组成的, 常见的段有数据段、索引段、回滚段等。InnoDB中对于段的管理,都是引擎自身完成,不需要人为对其控制,一个段中包含多个区。
  • : 区是表空间的单元结构,每个区的大小为1M。 默认情况下, InnoDB存储引擎页大小为16K, 即一个区中一共有64个连续的页。
  • : 页是组成区的最小单元,页也是InnoDB存储引擎磁盘管理的最小单元,每个页的大小默认为 16KB。为了保证页的连续性,InnoDB 存储引擎每次从磁盘申请 4-5 个区。
  • : InnoDB 存储引擎是面向行的,也就是说数据是按行进行存放的,在每一行中除了定义表时所指定的字段以外,还包含两个隐藏字段(后面会详细介绍)。

MyISAM

介绍:MySQL早期默认的存储引擎

特点:

  • 不支持事务,不支持外键
  • 支持表锁,不支持行锁
  • 访问速度快

文件:

  • xxx.sdi:存储表结构信息
  • xxx.MYD:存储数据
  • xxx.MYI:存储索引

Memory

介绍:

  • Memory引擎的表数据是存放在内存中的,由于受到硬件问题或断电问题的影响,只能将这些表作为临时表或缓存使用。

特点:

  • 内存存放
  • hash索引(默认)

文件:

xxx.sdi : 存储表结构信息

三者之间的区别

在这里插入图片描述

存储引擎选择

在选择存储引擎时,应该根据应用系统的特点选择合适的存储引擎。对于复杂的应用系统,还可以根据实际情况选择多种存储引擎进行组合。

  • InnoDB: 是Mysql的默认存储引擎,支持事务、外键、行级锁。如果应用对事务的完整性有比较高的要求,在并发条件下要求数据的一致性,数据操作除了插入和查询之外,还包含很多的更新、删除操作,那么InnoDB存储引擎是比较合适的选择。
  • MyISAM (被MongoDB取代): 如果应用是以读操作和插入操作为主,只有很少的更新和删除操作,并且对事务的完整性、并发性要求不是很高,那么选择这个存储引擎是非常合适的。(日志,电商足迹、评论等业务场景下)
  • MEMORY(被Redis取代):将所有数据保存在内存中,访问速度快,通常用于临时表及缓存。MEMORY的缺陷就是对表的大小有限制,太大的表无法缓存在内存中,而且无法保障数据的安全性。

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

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

相关文章

【JavaScript】6.DOM

文章目录 DOM1. 简介2. 获取元素2.1 根据 ID 获取2.2 根据标签名获取2.3 通过 HTML5 新增的方法获取2.4 特殊元素获取 3. 事件基础3.1 事件概述3.2 事件三要素3.3 执行事件步骤 DOM 1. 简介 文档对象模型(Document Object Model,简称 DOM)&…

web自动化测试框架落地实施全过程-测试环境搭建 (Selenium+Python)

一、什么是web自动化测试? Web自动化测试是指使用自动化工具模拟用户在Web浏览器中执行的操作,通过编写脚本来自动化执行测试用例,以验证Web应用程序的功能、性能和兼容性等方面的质量。其主要目的是降低测试成本和时间,并提高测试效率和准…

LDAP未授权漏洞验证

因为工作需要,这里验证了下LDAP未授权。 以下是收集到的资料,最后是具体使用!!!!! 更新 2)连接ad域有两个地址: ldap://http://XXXXX.com:389 和 ldap://http://XXXXX.…

算法的时间复杂度和空间复杂度(2)

计算斐波那契递归Fib的时间复杂度&#xff1f; long long Fib(size_t N) { if(N < 3) return 1; return Fib(N-1) Fib(N-2); } 因为递归先递推后回归&#xff0c;看起来规律像等比数列&#xff0c;也可以用错位相减法&#xff0c;因为斐波那契数列到第二项就不会再计算了&a…

传输层重点协议之【UDP协议】

1. UDP协议端格式 2. UDP的特点 2.1 无连接 知道对端的IP和端口号就直接传输&#xff0c;不需要建立连接 2.2 不可靠 没有任何的安全机制&#xff0c;发送端发送数据报后&#xff0c;如果因为网络故障数据报无法发送对方&#xff0c;UDP协议层也不会给应用层返回任何错误信…

第六章 Linux实际操作——实用指令

第六章 Linux实际操作——实用指令 6.1 指定运行级别6.2 找回root密码6.3 帮助指令6.3.1 man获得帮助信息6.3.2 help指令6.3.3 搜索引擎帮助更直接 6.4 文件目录类6.4.1 pwd指令6.4.2 ls指令6.4.3 cd指令6.4.4 mkdir 指令6.4.5rmdir指令删除空目录6.4.6 touch 指令6.4.7 cp 指令…

火山引擎边缘云,助力业务敏捷创新

[中国&#xff0c;上海&#xff0c;4 月 18 日]2023 春季火山引擎 FORCE 原动力大会正式举办。大会主论坛&#xff0c;火山引擎总裁谭待围绕云上增长三要素发表了重要演讲。在敏捷迭代专题中&#xff0c;谭待分享了火山引擎边缘云连接与计算无处不在的理念&#xff0c;并于现场…

【fluent udf】定义源项宏时,在迭代计算过程中UDM变量变inf、NAN、发散时如何解决?

一、问题背景 最近做的一个fluent仿真算例里用到源项宏&#xff0c;源项宏里用UDM定义了树脂固化度场。 在迭代计算的过程中&#xff0c;UDM的取值发散成了无穷大inf&#xff08;第一次计算取值是NAN&#xff09;&#xff0c;如下图所示。 由于每一次迭代计算过程中&#xf…

【嵌入式系统与入门】Day01 Arduino开发板

文章目录 1. Arduino概述1.1 是什么&#xff1f;1.2 分类1.3 组成1.4 电源 2. Arduino软件开发流程2.1 明确接口函数2.2 连接板子2.3 打开项目【或者自己编程序】2.4 选择板子类型2.5 选择通讯端口2.6 下载程序2.7. 编写程序代码——程序架构 3. 较常用的封装函数3.1 pinMode(p…

技术报告:Efficient and Effective Text Encoding for Chinese LLaMA AND Alpaca

技术报告&#xff1a;Efficient and Effective Text Encoding for Chinese LLaMA AND Alpaca IntroductionChinese LLaMAChinese AlpacaLora-Fine-tuning实验7Bpre- trainingInstruction-Tuning 13BPre-TrainingInstruct-Tuning Introduction 首先作者说了最近ChatGPT等模型在…

【SpringCloud】2、使用Nacos作为服务注册中心

1、项目搭建 首先&#xff0c;我们需要搭建一个 SpringCloud 微服务项目&#xff0c;后续的文章将基于此项目作为学习演示使用 1、创建 cloud-learn 目录&#xff0c;pom.xml 文件内容如下&#xff1a; <?xml version"1.0" encoding"UTF-8"?> &…

【数据统计】— 峰度、偏度、点估计、区间估计、矩估计、最小二乘估计

【数据统计】— 峰度、偏度、点估计、区间估计、矩估计、最小二乘估计 四分位差异众比率变异系数利用数据指标指导建模思路 形状变化数据分布形态峰度: 度量数据在中心聚集程度偏度 利用数据指标指导建模思路 参数估计点估计区间估计矩估计举例&#xff1a;黑白球&#xff08;矩…

修改键盘映射(注册表)Scancode Map

1.win R 打开 cmd命令框&#xff0c;输入regedit 2.赋值这个地址到蓝色框里&#xff1a; 计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout 3.右键 ->新建->二进制值&#xff0c;命名为 Scancode Map 4.现在来讲解怎么使用这个二进制表修…

LC串联谐振回路

理想LC串联谐振回路 下图是理想的LC串联谐振回路&#xff0c;不考虑L C的等效电阻。理想的LC回路没有任何损耗。 理想LC串联谐振的回路阻抗为&#xff1a; 令虚部为0&#xff0c;就可求出谐振角频率W0 可得谐振角频率&#xff1a; 可得谐振频率&#xff1a; 因为 所以电…

计算机网络之运输层

协议 协议就是计算机与计算机之间通信的“约定”&#xff0c;既为规则&#xff0c;只有遵循这个约定&#xff0c;双方就可以进行通信。 进程之间的通信 从通信和信息处理的角度来看&#xff0c;运输层向上面的应用层提供通信的服务&#xff0c;属于面向通信的最高层&#xf…

Redis哨兵(非集群 Rrdis 的高可用性 )

Redis哨兵(非集群 Rrdis 的高可用性 ) 1. 什么是哨兵 吹哨人巡查监控后台 master 主机是否故障,如果故障了根据投票数自动将某一个从库转换为新主库,继续对外服务 Redis哨兵在不使用Redis集群时为Redis提供高可用性 2. 作用 无人值守运维 3. 哨兵作为分布式系统 Redis S…

console.log(obj)不一定能的到obj当前的值

1.Log (anObject)的输出具有误导性; 只有在控制台中展开 > 时才能解析显示的对象的状态。它不是您在 console.log 对象时对象的状态。 相反&#xff0c;尝试 console.log (Object.keys ()) &#xff0c;或者甚至console.log(JSON.parse(JSON.stringify(obj))) &#xff0c;…

黑盒(功能)测试基本方法

1、黑盒测试的概念 1、什么是黑盒测试 &#xff08;1&#xff09;黑盒测试又称功能测试、数据驱动测试或基于规格说明书的测试&#xff0c;是一种从用户观点出发的测试。 &#xff08;2&#xff09;测试人员把被测程序当作一个黑盒子。 2、黑盒测试主要测试的错误类型有 &…

JVisualVM、Visual GC

JVisualVM JVisualVM Java VisualVM 是一款 JDK 自带免费的性能分析工具 public class JVisualVM {public static void main(String[] args) {Thread t1 new Thread(() -> {while (!Thread.currentThread().isInterrupted()) {}}, "JVisualVM测试子线程");t1.…

flinkcdc 动态的增加新的同步表到同一个作业中

背景 flinkcdc 2.0版本上线了一个新功能–支持动态加表这个是很有用的feature&#xff0c;本文介绍在开发中如何使用。 设想下假如你一个 CDC pipeline 监控了 4 张表&#xff0c;突然有天业务需求需要再加几张表&#xff0c;你肯定不想另起作业 (浪费资源)&#xff0c;那么这…