目录
介绍
Memory
介绍
特性
场景
MyISAM
介绍
存储格式
特性
场景
InnoDB
介绍
特性
场景
总结
MySQL系列:
MySQL(一)、InnoDB索引原理及优化
MySQL(二)、事务
MySQL(三)、锁
MySQL(四)、日志
介绍
数据库存储引擎是数据库底层软件组织,数据库管理系统(DBMS)使用数据引擎进行创建、查询、更新和删除数据。不同的存储引擎提供不同的存储机制、索引技巧、锁定水平等功能,使用不同的存储引擎,还可以开启特定的功能。MySQL的核心就是存储引擎,在前面的文章中我们介绍了聚簇索引,非聚簇索引,表级锁行级锁等内容,其实它们在不同的存储引擎上的表现是不一样的,本篇就来介绍MySQL中常用的存储引擎以及适用的场景对比。
MySQL5.1之前默认存储引擎是MyISAM,MySQL5.5之后默认存储引擎是InnoDB,这两个也是最常用的存储引擎。
使用下面的命令查看当前数据库支持的存储引擎:
Memory
介绍
Memory是MySQL中一类特殊的存储引擎。它使用存储在内存中的内容来创建表,而且数据全部放在内存中。在数据结构B+树那篇文章中有提到B+树是由于磁盘存储介质的IO瓶颈而出现的,那么对于内存型的存储引擎,使用B+树的意义就不大了,因此默认情况下,Memory引擎使用hash索引(也可以改为B+树索引),速度比使用B+树索引更快。但同时因为memory表的数据是存储在内存中,当服务重启或关机时,数据就会丢失,因此memory引擎使用的很少,现在基本上需要内存操作的时候都使用Redis了。
Memory引擎建的表由表结构文件(.frm) 和内存中的数据组成,这样有利于数据的快速处理,提高整个表的效率。
Memory存储引擎:https://dev.mysql.com/doc/refman/8.0/en/memory-storage-engine.html
特性
- MEMORY不支持BLOB或TEXT列;
- 对可包括NULL值的列的索引;
- 可以使用非唯一键;
- 使用固定的记录长度格式;
- 支持INSERT DELAYED;
- 支持AUTO_INCREMENT列;
- 当不再需要MEMORY表的内容时,要释放被MEMORY表使用的内存,应该执行DELETE FROM或TRUNCATE TABLE,或者删除整个表(使用DROP TABLE);
- 不支持事务;
- 不支持外键;
- 不支持行锁,只支持表锁;
场景
- 临时内存表;
- 内容变化不频繁;
- 数据量不大;
MyISAM
介绍
MyISAM基于ISAM存储引擎,并对其进行扩展,拥有较高的插入、查询速度,但不支持事务和外键。
使用MyISAM引擎创建数据库,将产生3个文件。文件的名字以表名字开始,文件类型:.FRM文件存储表定义,.MYD文件存储数据,.MYI文件存储索引。
MyISAM存储引擎:https://dev.mysql.com/doc/refman/8.0/en/myisam-storage-engine.html
存储格式
支持3种不同的存储格式:
静态表:表中的字段都是非变长字段,这样每个记录都是固定长度的,优点存储非常迅速,容易缓存,出现故障容易恢复;缺点是占用的空间通常比动态表多(因为存储时会按照列的宽度定义补足空格)。在取数据的时候,默认会把字段后面的空格去掉,可能会忽略数据本身前后带的空格。
动态表:记录不是固定长度的,这样存储的优点是占用的空间相对较少;缺点:频繁的更新、删除数据容易产生碎片,需要定期执行OPTIMIZE TABLE或者myisamchk-r命令来改善性能。
压缩表:因为每个记录是被单独压缩的,所以只有非常小的访问开支。
特性
- 支持大文件;
- 不支持事务;
- 不支持外键;
- 不支持行级锁,支持表级锁;
- BLOB和TEXT列可以被索引;
- 索引的列中允许有NULL值,这个值占每个键的0~1个字节;
- 每个MyISAM表最大索引数是64,每个索引最大的列数是16;
- 每个字符列可以有不同的字符集;
- 可以把数据文件和索引文件放在不同目录;
场景
- 读多或者写多的单一业务场景、不适合读写频繁的场景,会因表级锁而造成阻塞;
- 非事务场景;
- 读写并发访问较低的业务;
- 数据修改相对较少的业务;
- 以读为主的业务;
- 频繁的count(*)统计计算;
InnoDB
介绍
InnoDB存储引擎支持事务(ACID),支持行锁定和外键,是MySQL5.5之后默认的存储引擎,也是目前MySQL上使用最多的存储引擎。
InnoDB表由表结构文件(.frm),共享表空间文件(ibdata1),独占表空间文件(.ibd)以及日志文件(redo文件等)组成。
InnoDB存储引擎:https://dev.mysql.com/doc/refman/8.0/en/innodb-storage-engine.html
特性
- 高并发:采用多版本并发控制(MVCC)来支持高并发;
- 支持事务ACID;
- 实现了四个标准的隔离级别;
- 支持行级锁;
- 支持外键;
- 聚簇索引;
- 支持热备份;
场景
- 事务场景;
- 频繁读写的业务;
- 需要行级锁的场景;
总结
对比MyISAM、Memory、InnoDB引擎:
特 性 | MyISAM | Memory | InnoDB |
---|---|---|---|
存储限制 | 256TB | RAM | 64TB |
事务安全 | 不支持 | 不支持 | 支持 |
全文索引 | 支持 | 不支持 | 不支持 |
B树索引 | 支持 | 支持 | 支持 |
哈希索引 | 不支持 | 支持 | 不支持 |
数据缓存 | 不支持 | 不支持 | 支持 |
外键 | 不支持 | 不支持 | 支持 |
数据写入速度 | 高 | 高 | 低 |
文章知识点与官方知识档案匹配,可进一步学习相关知识MySQL入门技能树数据库组成存储引擎31842 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!