MySQL进阶-存储引擎

news2024/12/23 10:45:22

目录

1.MySQL体系结构

体系结构图

 各层的作用

2.存储引擎简介

2.1查看当前表的存储引擎

2.2 查询mysql支持的存储引擎

2.3 InnoDB简介

 2.4 MyISAM简介

2.5 Memory简介

3.存储引擎的选择


1.MySQL体系结构

mysql体系结构主要有四层结构,从上到下依次是:连接层-> 服务层-> 引擎层-> 存储层

体系结构图

 各层的作用

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

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

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

4、存储层:主要是将数据存储在文件系统之上,并完成与存储引擎的交互。

2.存储引擎简介

存储引擎就是存储数据、建立索引、更新/查询数据等技术的实现方式。存储引擎是基于表的,而不是基于库的,所以存储引擎也可被称为表结构。

在之前我们建表时都没有指定存储引擎,但是在mysql中的默认存储引擎就是 Innodb。

2.1查看当前表的存储引擎

可以查看某张表的建表语句

show create table account;

 ENGINE字段就是指定的存储引擎,所以在建表中我们就可以在这个字段指定对应的存储引擎。

例如:

create table sm(
    id int auto_increment primary key,
    name varchar(10)
)engine = 存储引擎名称;

2.2 查询mysql支持的存储引擎

查询mysql所支持的存储引擎可以用这个语句

show engines;

 Engine:存储引擎名称

Support:当前数据库是否支持

Comment:注释说明

Transactions:是否支持事务

2.3 InnoDB简介

InnoDB是MySQL数据库管理系统中最常用的存储引擎之一,它提供了许多高级功能和性能优化,特别适合于处理事务处理和高并发负载的应用程序。

特点:

  1. 事务支持:InnoDB是一个支持ACID(原子性、一致性、隔离性、持久性)事务的存储引擎。这意味着它可以确保数据的完整性和一致性,特别适用于需要处理金融交易或其他重要数据的应用程序。

  2. 行级锁定:InnoDB使用行级锁定(Row-Level Locking)来实现并发控制,允许多个事务同时访问同一张表的不同行,而不会导致锁定整个表。这提高了并发性能,减少了锁定冲突。

  3. 外键约束:InnoDB支持外键约束,可以在表之间建立引用关系,以维护数据的完整性。这允许数据库执行引用完整性检查,并确保父表和子表之间的关系是一致的。

  4. 数据缓存和索引缓存:InnoDB使用数据缓存(Data Buffer Cache)来存储表中的数据和索引缓存(Index Buffer Cache)来存储索引数据。这些缓存提高了查询性能,减少了对磁盘的访问。

  5. 自动崩溃恢复:InnoDB支持自动崩溃恢复功能,可以在数据库异常关闭后自动将数据库恢复到一致的状态,而无需手动干预。

  6. 支持热备份:InnoDB支持在线备份,允许在数据库运行时备份数据而不需要停机。这有助于提高系统的可用性。

  7. 多版本并发控制(MVCC):InnoDB使用MVCC机制,允许事务并发运行而不会阻塞彼此。每个事务可以看到数据库的一致性快照,这有助于避免脏读和不可重复读问题。

  8. 自适应哈希索引:InnoDB可以自动创建和管理哈希索引,以加速特定类型的查询操作,例如等值查找。

  9. 支持大容量数据:InnoDB支持大容量的数据存储,适用于需要存储大量数据的应用程序。

涉及的文件结构:

 InnoDB引擎的每张表都会对应一个表空间文件,类似于:xxx.ibd,存储表的结构(frm,sdi)、数据和索引。

 2.4 MyISAM简介

MyISAM引擎是MySQL早期的默认存储引擎

特点:

  1. 不支持事务:MyISAM不支持事务,因此不适用于需要严格的ACID(原子性、一致性、隔离性、持久性)事务支持的应用程序。这意味着如果在MyISAM表上执行INSERT、UPDATE或DELETE操作时发生错误,无法回滚到之前的状态。

  2. 表级锁定:MyISAM使用表级锁定(Table-Level Locking)来控制并发访问。这意味着当一个事务修改表中的某一行时,其他事务无法同时修改表的其他行,可能会导致锁定冲突和性能问题。

  3. 支持全文搜索:MyISAM存储引擎支持全文搜索功能,使其在需要进行文本搜索的应用中表现出色。MySQL的全文索引可以加速文本搜索操作。

  4. 不支持外键:MyISAM不支持外键约束,因此无法维护表之间的引用关系。这使得数据的完整性在一定程度上受到限制。

  5. 支持压缩表:MyISAM支持表级别的数据压缩,可以减小数据文件的尺寸,从而节省磁盘空间。这对于存储大量静态数据的表格非常有用。

  6. 支持表级别的锁定:MyISAM允许表级别的读锁定和写锁定,这使得在一些特殊情况下,如备份和优化表时,可以更容易地进行锁定和解锁。

  7. 不支持崩溃恢复:MyISAM不具备自动崩溃恢复机制,如果数据库崩溃或发生硬件故障,可能需要手动修复表格。

  8. 适用于只读或很少修改的数据:由于不支持事务和表级锁定,MyISAM通常适用于只读或很少修改的数据,例如存档数据、日志数据等。

涉及的文件结构:

xxx.sdi:存储表结构信息

xxx.MYD:存储数据

xxx.MYI:存储索引

2.5 Memory简介

Memory存储引擎是MySQL数据库管理系统中的一种特殊存储引擎,也被称为 "HEAP" 存储引擎。与其他常见的存储引擎(如InnoDB、MyISAM等)不同,Memory 存储引擎将数据完全存储在内存中,而不是存储在磁盘上,这使得 Memory 存储引擎非常快速。

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

特点:

  1. 数据存储在内存中:Memory 存储引擎将表中的数据存储在内存中,这意味着对表的读取和写入操作非常快速。它特别适用于需要快速访问临时数据的情况,例如会话缓存或临时表。

  2. 不支持事务:Memory 存储引擎不支持事务,因此不适合需要 ACID 特性的应用程序。如果数据库崩溃或发生错误,数据可能会丢失。

  3. 表级锁定:Memory 存储引擎使用表级锁定,这意味着当一个连接修改表的一部分时,其他连接无法同时修改同一表的其他部分。这可能导致锁定冲突。

  4. 不支持索引类型:Memory 存储引擎支持基本索引,但不支持某些高级索引类型,如全文索引。这会限制某些查询的效率。

  5. 不支持外键约束:Memory 存储引擎不支持外键约束,因此无法维护表之间的引用关系。

  6. 数据不持久化:由于数据存储在内存中,如果数据库服务器关闭或崩溃,数据将丢失。因此,Memory 存储引擎通常用于存储临时数据或缓存,而不是持久存储。

  7. 适用于临时数据和高速缓存:Memory 存储引擎适合用于需要快速读取和写入数据的应用程序,例如缓存存储或需要频繁重建的临时数据表。

 涉及的文件结构:

xxx.sdi:存储表结构信息

3.存储引擎的选择

存储引擎之前的特点都是各不相同的,只需要在实际情况选择最合适的存储引擎即可。

  1. InnoDB存储引擎

    • 适用场景:适用于大多数应用程序,特别是那些需要事务支持和数据完整性的应用。
    • 优点:支持ACID事务、行级锁定、外键约束,适用于高并发、高事务处理的应用。
    • 注意事项:相对于其他存储引擎,InnoDB通常需要更多的内存,因此需要配置适当的系统资源。
  2. MyISAM存储引擎

    • 适用场景:适用于只读或很少修改的数据,例如静态数据或日志数据。
    • 优点:读取性能较高,不支持事务的应用可以受益于它的速度。
    • 注意事项:不支持事务、表级锁定,不适用于高并发写入和需要数据完整性的应用。
  3. Memory存储引擎

    • 适用场景:适用于需要快速读取和写入数据的缓存或临时数据存储。
    • 优点:数据存储在内存中,读取和写入非常快速,适用于缓存和临时数据表。
    • 注意事项:不支持事务、表级锁定,数据不持久化,不适用于需要长期存储数据的应用。

在选择存储引擎时可以考虑下面的因素

  • 事务需求:如果应用程序需要支持事务(例如,处理金融交易或需要数据一致性),则应选择支持事务的存储引擎,如InnoDB。

  • 并发性需求:考虑应用程序的并发性需求。InnoDB的行级锁定可以提供更好的并发性,而MyISAM的表级锁定可能导致性能问题。

  • 数据持久性:如果需要持久性数据存储,应选择支持数据持久性的存储引擎,如InnoDB。如果可以容忍数据丢失,Memory存储引擎可能是一个选择。

  • 读取和写入模式:了解应用程序的读取和写入模式,以便选择适当的存储引擎。例如,对于只读操作频繁的应用程序,MyISAM可能是一个合理的选择。

  • 系统资源:根据系统的内存、CPU和磁盘资源来选择存储引擎。不同存储引擎对资源的使用有不同的要求。

  • 全文搜索需求:如果应用程序需要全文搜索功能,MyISAM通常比InnoDB更适合,因为它支持全文索引

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

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

相关文章

Spring Cloud zuul扩展能力设计和心得

前言 实际上Spring Cloud已经废弃zuul了,改用gateway,但是webflux的技术并没在实际项目大规模普及,还有很多servlet NIO的应用,所以zuul还是很有必要改造的,实测zuul调优(调节转发的连接池)跟g…

【算法挨揍日记】day11——852. 山脉数组的峰顶索引、162. 寻找峰值

852. 山脉数组的峰顶索引 852. 山脉数组的峰顶索引 题目描述&#xff1a; 符合下列属性的数组 arr 称为 山脉数组 &#xff1a; arr.length > 3存在 i&#xff08;0 < i < arr.length - 1&#xff09;使得&#xff1a; arr[0] < arr[1] < ... arr[i-1] < …

数据结构:二叉树(超详解析)

目录​​​​​​​ 1.树概念及结构 1.1树的概念 1.2树的相关概念 1.3树的表示 1.3.1孩子兄弟表示法&#xff1a; 1.3.2双亲表示法&#xff1a;只存储双亲的下标或指针 两节点不在同一树上&#xff1a; 2.二叉树概念及结构 2.1.概念 2.2.特殊的二叉树&#xff1a; 2…

掌握交易时机!

“您是否知道您选择购买和出售加密货币的时间会产生很大的影响&#xff1f;当然&#xff0c;大多数交易者都知道高价卖出和低价买入的基本知识。然而&#xff0c;在选择交易加密货币的最佳时机时&#xff0c;还需要考虑许多其他小细节。加密货币市场分析表明&#xff0c;一天中…

【MyBatis-Plus】快速精通Mybatis-plus框架—核心功能

刚才的案例中都是以id为条件的简单CRUD&#xff0c;一些复杂条件的SQL语句就要用到一些更高级的功能了。 1.条件构造器 除了新增以外&#xff0c;修改、删除、查询的SQL语句都需要指定where条件。因此BaseMapper中提供的相关方法除了以id作为where条件以外&#xff0c;还支持…

ES 关于 remote_cluster 的一记小坑

最近有小伙伴找到我们说 Kibana 上添加不了 Remote Cluster&#xff0c;填完信息点 Save 直接跳回原界面了。具体页面&#xff0c;就和没添加前一样。 我们和小伙伴虽然隔着网线但还是进行了深入、详细的交流&#xff0c;梳理出来了如下信息&#xff1a; 两个集群&#xff1a;…

Java常见API---split()

package daysreplace;public class SplitTest {public static void main(String[] args) {String str"武汉市|孝感市|长沙市|北京市|上海市";String[] array str.split("\\|");System.out.println(array[0]);System.out.println(array[1]);System.out.pri…

[黑马程序员TypeScript笔记]------一篇就够了

目录&#xff1a; TypeScript 介绍 TypeScript 是什么&#xff1f;TypeScript 为什么要为 JS 添加类型支持&#xff1f;TypeScript 相比 JS 的优势TypeScript 初体验 安装编译 TS 的工具包 编译并运行 TS 代码 简化运行 TS 的步骤 TypeScript 常用类型 概述类型注解常用基础…

​“债务飙升!美国一天内增加2750亿美元,金融震荡的前奏已拉开帷幕!”

2023年10月4日&#xff0c;美国政府向美国债务追加2750亿美元&#xff0c;相当于现在比特币&#xff08;BTC&#xff09;总市值的一半还多。 有人会说:多一点、少一点&#xff0c;没什么区别.....确实&#xff0c;当你看美国债务时&#xff0c;2750亿美元并没有什么意义&#x…

oringin的x轴(按x轴规定值)绘制不规律的横坐标

1.双击x轴 2.选择刻度线标签 3.选择刻度

【数据结构】排序算法(二)—>冒泡排序、快速排序、归并排序、计数排序

&#x1f440;樊梓慕&#xff1a;个人主页 &#x1f3a5;个人专栏&#xff1a;《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》 &#x1f31d;每一个不曾起舞的日子&#xff0c;都是对生命的辜负 目录 前言 1.冒泡排序 2.快速排序 2.1Hoare版 2.2占…

二叉树的初步认识

二叉树是这么一种树状结构&#xff1a;每个节点最多有两个孩子&#xff0c;左孩子和右孩子 重要的二叉树结构 完全二叉树&#xff08;complete binary tree&#xff09;是一种二叉树结构&#xff0c;除最后一层以外&#xff0c;每一层都必须填满&#xff0c;填充时要遵从先左后…

YOLOv5报错:TypeError: load() missing 1 required positional argument: ‘Loader‘

报错信息 报错位置 解决办法 将 self.update(yaml.load(fo.read())) 改为&#xff1a; self.update(yaml.safe_load(fo.read()))

信息学 学习/复习 抽签器(附源码)

问你一个问题&#xff0c;你考试前怎么复习呀&#xff1f; 效果图 以下是源代码&#xff0c;可自行修改 [C] #include<bits/stdc.h> #include<windows.h> using namespace std; vector<string>item; int main(void) {item.push_back("Manacher"…

谁“动”了我的信息?

通信公司“内鬼” 批量提供手机卡 超6万张手机卡用来发涉赌短信 2023年10月2日&#xff0c;据报道2022年12月&#xff0c;湖北省公安厅“雷火”打击整治治安突出问题专项行动指挥部研判发现&#xff0c;有人在湖北随州利用虚拟拨号设备GOIP发出大量赌博短信。随州市公安局研判…

第一课数组、链表、栈、队列

第一课数组、链表、栈、队列 acwing136 邻值查找---中等题目描述代码展示 lc20.有效的括号--简单题目描述代码展示 lc25.K 个一组翻转链表--困难题目描述代码展示 lc26.删除有序数组中的重复项--简单题目描述代码展示 lc88.合并两个有序数组--简单题目描述代码展示 lc141.环形链…

Flink--9、双流联结(窗口联结、间隔联结)

星光下的赶路人star的个人主页 我还有改变的可能性&#xff0c;一想起这点&#xff0c;我就心潮澎湃 文章目录 1、基于时间的合流——双流联结&#xff08;Join&#xff09;1.1 窗口联结&#xff08;Window Join&#xff09;1.2 间隔联结&#xff08;Interval Join&#xff09;…

【数据恢复篇】浅谈FTK Imager数据恢复功能

【数据恢复篇】浅谈FTK Imager数据恢复功能 日常取证工作中&#xff0c;常用FTK Imager制作磁盘镜像、挂载镜像等&#xff0c;但FTK Imager的数据恢复功能也是非常强大的&#xff0c;某些数据的恢复效果不输专业的数据恢复软件&#xff0c;甚至略胜一筹—【蘇小沐】 文章目录 …

项目设计:YOLOv5目标检测+机构光相机(intel d455和d435i)测距

1.介绍 1.1 Intel D455 Intel D455 是一款基于结构光&#xff08;Structured Light&#xff09;技术的深度相机。 与ToF相机不同&#xff0c;结构光相机使用另一种方法来获取物体的深度信息。它通过投射可视光谱中的红外结构光图案&#xff0c;然后从被拍摄物体表面反射回来…

【C++】:类和对象(2)

朋友们、伙计们&#xff0c;我们又见面了&#xff0c;本期来给大家解读一下有关Linux的基础知识点&#xff0c;如果看完之后对你有一定的启发&#xff0c;那么请留下你的三连&#xff0c;祝大家心想事成&#xff01; C 语 言 专 栏&#xff1a;C语言&#xff1a;从入门到精通 数…