存储引擎
MySQL中的数据使用不同的技术存储在文件(或内存)中,这些不同的技术以及配套的相关功能在MySQL中被称为存储引擎(也称作表类型)。
- show engines; 查看MySQL支持的引擎
功能 | InnoDB | MyISAM | Memory |
---|---|---|---|
存储限制 | 64TB | 256TB RAM | |
支持事务 | yes | no | no |
支持全文索引 | no | yes | no |
支持树索引 | yes | yes | yes |
支持哈希索引 | no | no | yes |
支持数据缓存 | yes | no | N/A |
支持外键 | yes | no | no |
InnoDB
MySQL5.5之后默认存储引擎。
- 存储方式
-
优点:提供了具有提交、回滚、崩溃恢复能力的事务安全、支持外键。
- 缺点:相比MyISAM,写处理效率差一点,并且占用更多空间存储数据和索引。
MyISAM
- 优势:访问速度快
EMEORY
- 存放在内存中,默认哈希索引,访问速度快
- 数据库服务一但关闭,数据丢失,对表大小限制
- 使用场景:内容变化不频繁的代码表,作为统计操作的中间结果表,便于高效分析中间结果。
MERGE
选择存储引擎原则
- 如果要提供提交、回滚和恢复的事务安全(ACID 兼容)能力,并要求实现并发控制,InnoDB 是一个很好的选择。
- 如果数据表主要用来插入和查询记录,则 MyISAM 引擎提供较高的处理效率。
- 如果只是临时存放数据,数据量不大,并且不需要较高的数据安全性,可以选择将数据保存在内存的 MEMORY 引擎中,MySQL 中使用该引擎作为临时表,存放查询的中间结果。
- 如果只有 INSERT 和 SELECT 操作,可以选择Archive 引擎,Archive 存储引擎支持高并发的插入操作,但是本身并不是事务安全的。Archive 存储引擎非常适合存储归档数据,如记录日志信息可以使用 Archive 引擎。