mysql 各种存储引擎介绍
liebian365 2024-11-27 17:11 19 浏览 0 评论
一、什么是mysql引擎,有啥用?
mysql存储数据时,有不同的存储方式,这些方式都使用了不同的层次实现(如:存储机制,索引技巧,锁定水平),底层实现的差异带来的功能也就不同。在不同的场景下使用合适的存储方式就能让你的数据读写速度更快或者获得额外的功能。
二、查询Mysql支持存储引擎
show engines; //查看所有引擎
show variables like '%storage_engine%';//查看默认引擎
三、MySQL 各大存储引擎
InnoDB
InnoDB是一个事务型存储引擎,提供了对数据库ACID事务的支持,并且实现了SQL标志的四种隔离级别。该引擎还提供了行级锁和外键约束,它的设计目的是处理大容量数据库系统。
适用场景:
经常更新的表,适合处理多重并发更新亲求。
支持事务
可以从灾难中恢复(通过bin-log日志等)
外键约束。只有他支持外键。
支持自动增加列熟悉auto_increment。
.frm 文件 存储表定义;
.ibd 文件 独立表空间数据存储和索引
ibdata1 共享表空间,存储系统信息
InnoDB包含后台线程、缓冲池
后台线程
多线程模型,用来处理不同的问题
(1) Master Thread
把缓冲池数据异步刷新到磁盘,包括脏页、合并插入缓存、undo页回收。
(2)IO Thread
innodb使用大量AIO处理写IO请求。IO Thread的作用就是负责这些IO请求的回调。
(3)Purge Thread
事务提交后,使用undolog可能不再需要,需要purge回收已经分配的undo页。
(4)Page cleaner Thread
脏页的刷盘都放到这个线程了
内存
(1)缓存池
Innodb存储是基于磁盘,存储安装页进行管理,所以需要缓冲池协调一下CPU和磁盘速度,在数据库读页的时候,先从磁盘读到缓冲池,下一次读的时候先看缓冲池有没有。修改时也是先修改缓冲池里的数据,再以一定的频率写入磁盘。
缓存池有索引页,数据页,undo页,插入缓存,自适应哈希,锁信息,数据字典等。
缓冲池里还有redo log缓冲,和额外的缓冲空间。
1.Master Thread每1s把重做日志缓冲刷到重做日志文件
2.当有新事务提交的时候刷。
3.当重做缓冲池剩余空间小于1/2时刷。
(2)checkPoint
InnoDB有两种checkPoint:
sharp checkPoint(默认的工作方式)
fuzzy checkPoint
sharp checkPoint是在数据库关闭时把所有脏页刷到磁盘,但是数据库在运行的时候肯定不能这样。
Fuzzy是只刷新一部分,InnoDB引擎使用这种刷新方式,下面是发生fuzzy checkPoint的几种方式:
(3)mysql日志
日志redolog 和 binlog ,redolog 是独属于 innodb 的日志,binlog 则是属于 server 层的日志。
redolog 是物理日志,记录的是某个表的数据做了哪些修改,redolog 是固定大小的,也就是说后面的日志会覆盖前面的日志。
binlog 又称作归档日志,它记录了对 MySQL 数据库执行更改的所有操作,但是不包括 SELECT 和 SHOW 这类操作。binlog 是逻辑日志,记录的是某个表执行了哪些操作。binlog 是追加形式的写入日志,后面的日志不会被前面的覆盖。
//创建一个InnoDB表
create table testInnoDB(
id int unsigned primary key auto_increment,
name varchar(20) not null
)engine=innodb;
Mylsam
MyIsam 是mysql5.0之前的默认数据库引擎,最为常用。拥有较高的插入,查询速度,但不支持事务。存储引擎独立于操作系统,简单说就是可用在windows上使用,也可用将数据转移到Lunex操作系统上。系统兼容性很好,插入和更新需要进行全表锁,效率会低一些。适合查询量大的数据库。表损坏后不能主动恢复。
tb_demo.frm,存储表定义;
tb_demo.MYD,存储数据;
tb_demo.MYI,存储索引。
//创建一个myisam表
create table test(
id int unsigned primary key auto_increment,
name varchar(20) not null
)engine=myisam;
innodb和Myiasm这两种引擎的数据结构都是B+树
存储的不同:
mysisam树节点存储得是数据的地址,指向实际的数据;
innodb树节点存储得是实际的数据;这种索引也被称为聚集索引
BDB
源自Berkeley DB,事务型数据库的另一种选择,支持Commit和Rollback等其他事务特效
Memory
创建表的数据都存储在内存中,并且使用HASH索引,服务一旦关闭,表中的数据就会丢失,表的访问速度非常快。
MRG_MYISAM存储引擎
MERGE存储引擎是一组MyISAM表的组合,这些MyISAM表结构必须完全相同,尽管其使用不如其它引擎突出,但是在某些情况下非常有用。说白了,Merge表就是几个相同MyISAM表的聚合器;Merge表中并没有数据,对Merge类型的表可以进行查询、更新、删除操作,这些操作实际上是对内部的MyISAM表进行操作。
Blackhole
任何写入到此引擎的数据均会被丢失;Sekect语句内容永远是空。
Archive
Archive是归档的意思,在归档之后很多的高级功能就不在支持了,仅仅支持最基本的插入和查询两种。Archive拥有很好的压缩机制,它使用Zlib压缩库。
archive是归档的意思,仅仅支持插入和查询两种功能,在MySQL5.5以后支持索引功能,他拥有很好的压缩机制,使用zlib压缩库,在记录请求的时候实时的进行压缩,经常被用来作为仓库使用。适合存储大量的独立的作为历史记录的数据。拥有很高的插入速度但是对查询的支持较差
CSV
数据存储为CSV文件格式,不用进行转换,可以对数据文件直接编辑
文件结构:
.frm表结构描述
.csv数据
.csm表状态、当前记录数量等
特点:
1、没有索引、不能为NULL、不能自增
2、更新和删除时先写入到临时文件,然后在rnd_end()函数中重新生成数据文件
3、可以对数据文件直接编辑(保存文本文件内容)
4、以CSV格式进行数据存储(逗号隔开,引号)
5、数据以文本方式存储在文件中
6、CSV存储引擎可以将csv文件作为mysql的表进行处理。存储格式就是普通的csv文件。
Performace_Schema
MySql 5.5新出的一个存储引擎,主要是用来收集数据库服务器的性能参数。但是我们无法创建该类型的表,它都是有MySql系统自己创建的。
主要提供如下功能:
1、提供进程的详细信息包含了 锁、互斥变量、文件信息
2、保持历史的事件汇总信息,为MySql服务器的性能做出详细的判断。
3、对于新增和删除监控时间点都非常容易,并可以随意的改变Mysql服务器的监控周期
这个需要在配置文件my.cnf中进行配置才能生效。
Federated
特点:
1、专门针对远程数据库的实现一般情况下在本地数据库中建表会在数据库目录中生成相应的表定义文件,并同时生成相应的数据文件。
但通过FEDERATED引擎创建的表只是在本地有表定义文件,数据文件则存在于远程数据库中通过这个引擎可以实现类似Oracle 下DBLINK的远程数据访问功能
2、本地的表结构必须与远程的完全一样。
3、远程数据库目前仅限MySQL
4、不支持事务
5、不支持表结构修改
Cluster/NDB
高冗余的存储引擎,用多台数据机器联合提供服务以提高整体性能和安全性。适合数据量大,安全和性能要求高的应用
EXAMPLE
存储引擎是一个不做任何事情的存根引擎。它的目的是作为 MySQL 源代码中的一个例子,用来演示如何开始编写一个新存储引擎。同样,它的主要兴趣是对开发者。EXAMPLE: 存储引擎不支持编索引。
相关推荐
- “版本末期”了?下周平衡补丁!国服最强5套牌!上分首选
-
明天,酒馆战棋就将迎来大更新,也聊了很多天战棋相关的内容了,趁此机会,给兄弟们穿插一篇构筑模式的卡组推荐!老规矩,我们先来看10职业胜率。目前10职业胜率排名与一周前基本类似,没有太多的变化。平衡补丁...
- VS2017 C++ 程序报错“error C2065:“M_PI”: 未声明的标识符"
-
首先,程序中头文件的选择,要选择头文件,在文件中是没有对M_PI的定义的。选择:项目——>”XXX属性"——>配置属性——>C/C++——>预处理器——>预处理器定义,...
- 东营交警实名曝光一批酒驾人员名单 88人受处罚
-
齐鲁网·闪电新闻5月24日讯酒后驾驶是对自己和他人生命安全极不负责的行为,为守护大家的平安出行路,东营交警一直将酒驾作为重点打击对象。5月23日,东营交警公布最新一批饮酒、醉酒名单。对以下驾驶人醉酒...
- Qt界面——搭配QCustomPlot(qt platform)
-
这是我第一个使用QCustomPlot控件的上位机,通过串口精确的5ms发送一次数据,再将读取的数据绘制到图表中。界面方面,尝试卡片式设计,外加QSS简单的配了个色。QCustomPlot官网:Qt...
- 大话西游2分享赢取种族坐骑手办!PK趣闻录由你书写
-
老友相聚,仗剑江湖!《大话西游2》2021全民PK季4月激燃打响,各PK玩法鏖战齐开,零门槛参与热情高涨。PK季期间,不仅各种玩法奖励丰厚,参与PK趣闻录活动,投稿自己在PK季遇到的趣事,还有机会带走...
- 测试谷歌VS Code AI 编程插件 Gemini Code Assist
-
用ClaudeSonnet3.7的天气测试编码,让谷歌VSCodeAI编程插件GeminiCodeAssist自动编程。生成的文件在浏览器中的效果如下:(附源代码)VSCode...
- 顾爷想知道第4.5期 国服便利性到底需优化啥?
-
前段时间DNF国服推出了名为“阿拉德B计划”的系列改版计划,截至目前我们已经看到了两项实装。不过关于便利性上,国服似乎还有很多路要走。自从顾爷回归DNF以来,几乎每天都在跟我抱怨关于DNF里面各种各样...
- 掌握Visual Studio项目配置【基础篇】
-
1.前言VisualStudio是Windows上最常用的C++集成开发环境之一,简称VS。VS功能十分强大,对应的,其配置系统较为复杂。不管是对于初学者还是有一定开发经验的开发者来说,捋清楚VS...
- 还嫌LED驱动设计套路深?那就来看看这篇文章吧
-
随着LED在各个领域的不同应用需求,LED驱动电路也在不断进步和发展。本文从LED的特性入手,推导出适合LED的电源驱动类型,再进一步介绍各类LED驱动设计。设计必读:LED四个关键特性特性一:非线...
- Visual Studio Community 2022(VS2022)安装图文方法
-
直接上步骤:1,首先可以下载安装一个VisualStudio安装器,叫做VisualStudioinstaller。这个安装文件很小,很快就安装完成了。2,打开VisualStudioins...
- Qt添加MSVC构建套件的方法(qt添加c++11)
-
前言有些时候,在Windows下因为某些需求需要使用MSVC编译器对程序进行编译,假设我们安装Qt的时候又只是安装了MingW构建套件,那么此时我们该如何给现有的Qt添加一个MSVC构建套件呢?本文以...
- Qt为什么站稳c++GUI的top1(qt c)
-
为什么现在QT越来越成为c++界面编程的第一选择,从事QT编程多年,在这之前做C++界面都是基于MFC。当时为什么会从MFC转到QT?主要原因是MFC开发界面想做得好看一些十分困难,引用第三方基于MF...
- qt开发IDE应该选择VS还是qt creator
-
如果一个公司选择了qt来开发自己的产品,在面临IDE的选择时会出现vs或者qtcreator,选择qt的IDE需要结合产品需求、部署平台、项目定位、程序猿本身和公司战略,因为大的软件产品需要明确IDE...
- Qt 5.14.2超详细安装教程,不会来打我
-
Qt简介Qt(官方发音[kju:t],音同cute)是一个跨平台的C++开库,主要用来开发图形用户界面(GraphicalUserInterface,GUI)程序。Qt是纯C++开...
- Cygwin配置与使用(四)——VI字体和颜色的配置
-
简介:VI的操作模式,基本上VI可以分为三种状态,分别是命令模式(commandmode)、插入模式(Insertmode)和底行模式(lastlinemode),各模式的功能区分如下:1)...
你 发表评论:
欢迎- 一周热门
- 最近发表
-
- “版本末期”了?下周平衡补丁!国服最强5套牌!上分首选
- VS2017 C++ 程序报错“error C2065:“M_PI”: 未声明的标识符"
- 东营交警实名曝光一批酒驾人员名单 88人受处罚
- Qt界面——搭配QCustomPlot(qt platform)
- 大话西游2分享赢取种族坐骑手办!PK趣闻录由你书写
- 测试谷歌VS Code AI 编程插件 Gemini Code Assist
- 顾爷想知道第4.5期 国服便利性到底需优化啥?
- 掌握Visual Studio项目配置【基础篇】
- 还嫌LED驱动设计套路深?那就来看看这篇文章吧
- Visual Studio Community 2022(VS2022)安装图文方法
- 标签列表
-
- wireshark怎么抓包 (75)
- qt sleep (64)
- cs1.6指令代码大全 (55)
- factory-method (60)
- sqlite3_bind_blob (52)
- hibernate update (63)
- c++ base64 (70)
- nc 命令 (52)
- wm_close (51)
- epollin (51)
- sqlca.sqlcode (57)
- lua ipairs (60)
- tv_usec (64)
- 命令行进入文件夹 (53)
- postgresql array (57)
- statfs函数 (57)
- .project文件 (54)
- lua require (56)
- for_each (67)
- c#工厂模式 (57)
- wxsqlite3 (66)
- dmesg -c (58)
- fopen参数 (53)
- tar -zxvf -c (55)
- 速递查询 (52)