MySQL进阶-存储引擎

目录

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.rhkb.cn/news/149333.html

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

相关文章

论文阅读——Pyramid Grafting Network for One-Stage High Resolution Saliency Detection

目录 基本信息标题目前存在的问题改进网络结构CMGM模块解答为什么要用这两个编码器进行编码 另一个写的好的参考 基本信息 期刊CVPR年份2022论文地址https://arxiv.org/pdf/2204.05041.pdf代码地址https://github.com/iCVTEAM/PGNet 标题 金字塔嫁接网络的一级高分辨率显著性…

Vue3 模糊搜索筛选

Vue3 模糊搜索筛选 环境&#xff1a; vue3 tselement plus 目标&#xff1a; 输入框输入内容&#xff0c;对展示的列表进行模糊搜索筛选匹配的内容。 代码如下&#xff1a; <div style"margin-top: 50px"><el-input v-model"valueInput" size&…

纸质书籍OCR方案大揭秘,快来看看有哪些神奇的黑科技

随着数字化时代的来临&#xff0c;纸质书籍逐渐被电子书所替代。在将纸质书籍转换为电子格式的过程中&#xff0c;扫描电子书目录并进行文字识别&#xff08;OCR&#xff0c;Optical Character Recognition&#xff09;成为了一项重要的工作。OCR技术能够将纸质书籍中的文字内容…

【开发篇】十六、SpringBoot整合JavaMail实现发邮件

文章目录 0、相关协议1、SpringBoot整合JavaMail2、发送简单邮件3、发送复杂邮件 0、相关协议 SMTP&#xff08;Simple Mail Transfer Protocol&#xff09;&#xff1a;简单邮件传输协议&#xff0c;用于发送电子邮件的传输协议POP3&#xff08;Post Office Protocol - Versi…

基于SpringBoot的学生选课系统

基于SpringBoot的学生选课系统的设计与实现&#xff0c;前后端分离 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBootMyBatisVue工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 前台主页 登录界面 管理员界面 教师界面 学生界面 摘要 学生选课系统…

Electron笔记

基础环境搭建 官网:https://www.electronjs.org/zh/ 这一套笔记根据这套视频而写的 创建项目 方式一: 官网点击GitHub往下拉找到快速入门就能看到下面这几个命令了 git clone https://github.com/electron/electron-quick-start //克隆项目 cd electron-quick-start //…

Spring Cloud OpenFeign 性能优化的4个方法

OpenFeign 是 Spring 官方推出的一种声明式服务调用和负载均衡组件。它的出现就是为了替代已经进入停更维护状态的 Netflix Feign&#xff0c;是目前微服务间请求的常用通讯组件。 1.超时设置 OpenFeign 底层依赖Ribbon 框架&#xff0c;并且使用了 Ribbon 的请求连接超时时间…

使用4090显卡部署 Qwen-14B-Chat-Int4

使用4090显卡部署 Qwen-14B-Chat-Int4 1. Qwen-Agent 概述2. Github 地址3. 创建虚拟环境4. 安装依赖项5. 快速使用6. 启动 web 演示7. 访问 Qwen 1. Qwen-Agent 概述 通义千问-14B&#xff08;Qwen-14B&#xff09; 是阿里云研发的通义千问大模型系列的140亿参数规模的模型。…

【Java】类和接口的区别

1. 类和类的继承关系&#xff08;一个类只能单继承一个父类&#xff0c;不能继承n多个不同的父类&#xff09; 继承关系&#xff0c;只能单继承&#xff0c;但可以多层继承 2. 类和接口的实现关系&#xff08;一个类可以实现n多个不同的接口&#xff09; 实现关系&#xff0c;可…

从零开始的C++(五)

1.类和对象的补充 当对象是const修饰的常量时&#xff0c;形参中的this是隐含的&#xff0c;那么该如何写函数才能传常量对象呢&#xff1f;如果还是按照正常的方式写&#xff0c;则会出现实参是const修饰的&#xff0c;形参没有&#xff0c;出现了权限的扩大&#xff0c;无法…

开发工具箱 —— it-tools

文章目录 开发工具箱 —— it-tools安装访问效果 开发工具箱 —— it-tools 安装 docker 安装教程&#xff1a;在 CentOs7 中安装宝塔面板和 Docker&#xff08;包括MySQL&#xff0c;Redis&#xff09; docker 安装命令 docker run -d --name it-tools --restart unless-st…

012-第二代硬件选型

第二代硬件选型 文章目录 第二代硬件选型项目介绍重新换平台缘由X86 && Arm 架构切换 ARM Linux 硬件选型系统确定Qt 版本确定总结一下 关键字&#xff1a; Qt、 Qml、 Arm、 X86、 linux 项目介绍 欢迎来到我们的 QML & C 项目&#xff01;这个项目结合了 QM…

浏览器技巧:谷歌浏览器六个实用设置小技巧,值得收藏

目录 1、确保你的浏览器启用标准保护选项 2、使用安全DNS&#xff08;DNS over HTTPS&#xff09; 3、网站通知修改为"静态指示方式" 4、启用页面预加载提升网页加载速度 5、阻止Chrome浏览器在后台运行 6. 更改 Chrome 启动后打开方式为"上次打开的网页&…

Android---字节码层面分析Class类文件

Java 提供了一种可以在所有平台上都能使用的一种中间代码---字节码文件(.class文件)。有了字节码&#xff0c;无论是那个平台只要安装了虚拟机都可以直接运行字节码文件。有了虚拟机&#xff0c;解除了 java 虚拟机与 java 代码之间的耦合。 Java 虚拟机当初被设计出来时就不单…

如何搭建一个 websocket

环境: NodeJssocket.io 4.7.2 安装依赖 yarn add socket.io创建服务器 引入文件 特别注意: 涉及到 colors 的代码&#xff0c;请采取 console.log() 打印 // 基础老三样 import http from "http"; import fs from "fs"; import { Server } from &quo…

安装NodeJS并使用yarn下载前端依赖

文章目录 1、安装NodeJS1.1 下载NodeJS安装包1.2 解压并配置NodeJS1.3 验证是否安装成功2、使用yarn下载前端依赖2.1 安装yarn2.2 使用yarn下载前端依赖参考目标:在Windows下安装新版NodeJS,并使用yarn下载前端依赖,实现运行前端项目。 1、安装NodeJS 1.1 下载NodeJS安装包…

面试题:Redis和MySQL的事务区别是什么?

大家好&#xff0c;我是小米&#xff01;今天我要和大家聊聊一个在技术面试中经常被问到的问题&#xff1a;“Redis和MySQL的事务区别是什么&#xff1f;”这个问题看似简单&#xff0c;但实际上涉及到了数据库和缓存两个不同领域的知识&#xff0c;让我们一起来深入了解一下吧…

阿里云ECS和轻量服务器有什么区别?

阿里云服务器ECS和轻量应用服务器有什么区别&#xff1f;轻量和ECS优缺点对比&#xff0c;云服务器ECS是明星级云产品&#xff0c;适合企业专业级的使用场景&#xff0c;轻量应用服务器是在ECS的基础上推出的轻量级云服务器&#xff0c;适合个人开发者单机应用访问量不高的网站…

FFmpeg:打印音/视频信息(Meta信息)

多媒体文件基本概念 多媒体文件其实是个容器在容器里面有很多流(Stream/Track)每种流是由不同的编码器编码的从流中读出的数据称为包在一个包中包含着一个或多个帧 几个重要的结构体 AVFormatContextAVStreamAVPacket FFmpeg操作流数据的基本步骤 打印音/视频信息(Meta信息…

模糊搜索利器:Python的thefuzz模块详解

文章目录 thefuzz模块简介thefuzz模块的参数和方法使用thefuzz实现模糊搜索在Python中,thefuzz模块是一个用于实现模糊搜索的强大工具。它可以帮助我们在处理字符串时,快速找到相似的匹配项。本文将详细介绍thefuzz模块的功能和用法,并结合代码示例演示如何实现模糊搜索。 t…