mysql存储引擎精彩介绍

Innodb

innodb是一种事务性存储引擎。
完善支持是事务的ACID特性。
MySQL5.5.8及之后版本默认为Innodb储存引擎。

数据存储和innodb_file_per_table有关。
ON:独立表空间,tablename.ibd
OFF:系统表空间,ibdataX

当然都有frm文件,数据结构
mysql5.6(含5.5之前)之前的innodb_file_per_table默认值为off
如果是off,因为使用的系统表空间,意味着系统表空间无法简单的收缩文件大小,造成大量空间浪费如果是on,独立表空间可以通过optimize table命令收缩系统文件

IO比较

因为系统表使用的是一个文件,会产生IO瓶颈。
独立表空间可以同时向多个文件刷新数据。
整体来说使用独立表空间比使用系统表空间好的多
表转移步骤,如何将系统表空间转用到独立表空间
步骤:
1、使用mysqldump导出所有数据库表数据
2、停止mysql服务器,修改参数(innodb_file_per_table),并说出Innodb相关文件
3、重启mysql服务,重建innodb系统表空间
4、重新导入数据

事务日志

为实现事务的原子性、持久性、一致性,采用Redo Log和Undo Log
可以通过 show variables like ‘innodb_log_buffer_size’查看缓存大小,
一般1秒会将缓存日志刷到磁盘上。
Undo Log主要是帮助未提交事务进行回滚
Redo log存储的是已提交的事务。
innodb支持行级锁
行级锁能支持最大的并发性,行级锁是由存储引擎层实现的。
mysql>5.7innodb支持全文索引和空间函数

什么是锁

锁对主要作用是管理共享资源的并发访问
锁用于实现事务的隔离性
锁的类型
共享锁(读锁)
独占锁(写锁)

堵塞和死锁区别

什么是堵塞?
不同锁的兼容性的关系,在某些情况,某个事务等待另外事务中的锁释放,形成了堵塞,例在一个表加排他锁,如果再加共享锁的话,需要等待排他锁释放。出现大量堵塞,慢查询是其中一个重要原因,表备份也是其中一个原因。过多的堵塞绝不是一件好事,会是连接堆积,占用大量系统资源,导致系统性能整体下降
什么是死锁?
两个或两个以上的事务,执行过程中相互占用了对方等待的资源而造成的异常。出现死锁,mysql察觉并选择一个占用事务最少的事务

CSV储存引擎

以文本方式储存在文件中,而之前两种储存引擎是以2进制存储的。
.CSV文件存储表的内容
.CSM文件存储表的元数据如表状态和数据量
.frm文件储存表结构信息
特点:
1、以CSV格式进行数据存储 格式 “aaa”,”bbb”
2、所有列必须都是不能为null的
3、不支持索引(不适合大表,不适合在线处理,因为没有索引,需要进行全面扫描)
4、可以对数据文件直接编辑(其他的是以2进制,所以不能直接编辑)
适合场景:
适合做为数据交互的中间表

Archive存储引擎

1、已zlib对表数据进行压缩,磁盘I/O更少
2、数据存储在ARZ为后缀的文件中
3、只支持insert和select操作(删除和更新不允许)
4、只允许在自增ID列上加索引
场景
日记和数据采集类应用

Memory

存储特点:
1、也称HEAP存储引擎,所以数据保存在内存中(数据易失性)
2、因为保存在内存,I/O效率非常高
功能特点:
1、支持HASH索引所有和BTree索引
2、HASH索引:等值查询非常快。
3、BTree索引:范围查询比较块。
4、所有字段都为固定长度varchar(10)=char(10)
5、不支持BLOG和TEXT等大字段
6、使用表级锁
7、最大大小由max_heap_table_size参数决定

Memory有一个比较容易混淆的概念
Memory存储引擎表:
临时表:1)系统使用临时表 2)create temporary table建立的临时表

场景:
1、用于查找或者是映射表:例如邮编和地区的对应表
2、可以用于保存数据分析中产生的中间表
3、用于缓存周期性聚合数据的结果表
重点:因为Memory数据易丢失,所以要求数据可再生的

Federated存储引擎

特点:
1、可以不使用复制技术的情况下,可以在本地访问远程MySQL服务器上表的方法
2、本地不存储任何数据,数据全部放在远程服务器上
3、本地需要,保存表接口和远程服务器的连接信息
如何使用
可以像mssql一样连接服务器功能,但性能并不好,在当前mysql版本中是默认禁止Federated存储引擎。
使用场景
偶尔的统计分析及手工查询

如何选择正确的存储引擎

考虑:1、事务 2、备份 3、崩溃恢复
最好均使用innodb引擎,并且不要混合使用存储引擎,例如使用到了myisam和Innodb混合使用到事务,若遇到回滚,innodb可以恢复,而myisam则不行,这就出现了BUG。
其他提醒:
mysqldump备份数据不能算是热备方案,一方面mysqldump是逻辑备份,另一方面,为保证数据一致性,mysqldump必须对备份数据进行加锁

发布了57 篇原创文章 · 获赞 76 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/zhang5207892/article/details/79168115