mysql不同存储引擎各自特点以及使用场景

myisam
特性
建表会生成frm MYD(特有) MYI(特有)三个文件
并发性及锁级别
表级锁并发性差
表损坏修复:不支持事务
可以使用check table tabklename和repair table tablename 来进行myisam表的检查和修复
还有mysql的工具myisamchk –help 来进行修复
MyISAM 支持数据压缩 myisampack *.MYI
对于已经压缩的表只能进行读操作

使用场景:
1.非事务型应用
2.只读类应用
3.空间类应用

innodb(mysql5.5及以后版本默认存储引擎):
事务型存储引擎,支持ACID
使用表空间进行数据存储
使用 show variables like ‘innodb_file_per_table’;查看表空间类型
on:独立表空间:tablename.ibd
off:系统表空间:ibdataX
修改这个参数使用set global innodb_file_per_table=on(off);来完成
两者之间的比较:
1.系统表空间无法简单的收缩文件大小,会造成较大的空间浪费(即删除无效数据之后不会改变文件的大小)
独立表空间可以通过optimize table命令收缩系统文件,这种方法不会影响数据表的正常使用
2.系统表空间会产生IO瓶颈
独立表空间可以同时向多个文件刷新数据(频繁写入的表)
建议:对innodb使用独立表空间

表转移的步骤
把原来存在与系统表空间中的表转移到独立表空间中的方法
步骤:
1.使用mysqldump导出所有数据库表数据
2.停止MySQL服务,修改参数,并删除Innodb相关文件
3.重启MySQL服务,重建Innodb系统表空间
4.重新导入数据

Innodb特性
Innodb是一种事务型存储引擎
完全支持事务的ACID特性
即原子性、一致性、隔离性、持久性
使用Redo Log和Undo Log来完成一致性
show variables like ‘innodb_log_buffer_size’; 查看redo 缓冲区大小
show variables like ‘innodb_log_file_in_group’; 查看log file数量

innodb支持行级锁
行级锁可以最大程度的支持并发
行级锁是由存储引擎层实现的

什么是锁
锁对主要作用是管理共享资源的并发访问
用于实现事务的隔离性
锁的类型
共享锁(读锁)
独占锁(写锁)
MySQL锁的粒度
表级锁(开销小,并发性低),通常在服务器层实现
行级锁(开销大,并发性高),只会在存储引擎层面进行实现
阻塞和死锁

innodb状态检查
show engine innodb status

适用场景:
mysql5.7之后已经支持全文索引以及空间函数
适用于大多数OLTP应用(On-Line Transaction Processing联机事务处理过程(OLTP)也称为面向交易的处理过程,其基本特征是前台接收的用户数据可以立即传送到计算中心进行处理,并在很短的时间内给出处理结果,是对用户操作快速响应的方式之一。)

CSV存储引擎
数据以文本方式存储在文件中
.CSV文件存储表内容
.CSM文件存储表的元数据如表状态和数据量
.frm文件存储表结构信息(mysql服务器层所使用)
特点
以CSV格式进行数据存储
所有列必须都是不能为NULL的
不支持索引(不适合大表,不适合在线处理)
可以对数据文件直接编辑,保存文本文件内容
使用场景
适合作为数据交换的中间表
电子表格->CSV文件->MySQL数据目录
数据->CSV文件->其他web程序

Archive存储引擎
以zlib对表数据进行压缩,磁盘I/O更少
数据存储在ARZ为后缀的文件中
特点:
只支持insert和select操作
只允许在自增ID列上加索引
————————————————
版权声明:本文为CSDN博主「rammel」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/rammus7/article/details/79392635

你可能感兴趣的:(mysql不同存储引擎各自特点以及使用场景)