存储引擎是数据库的底层软件组件,使用存储引擎对数据库中的数据进行操作。不同的存储引擎,提供了不同的特性及功能。可以基于不同的使用场景,选择合适的存储引擎。
MySQL存储引擎
MySQL提供了多种不同的存储引擎供我们使用,并且不同的表可以使用不同的存储引擎。
常见的存储引擎有InnoDB、MyISAM、Memory、Merge、Archive、CSV等。
可以使用show engines子句查看数据库支持的存储引擎:
从上图可以看出,只有InnoDB存储引擎支持事务特性。
Engine:存储引擎名称;
Support:当前数据库是否支持该存储引擎;Yes:支持且可使用;No:不支持;Default:数据库当前默认存储引擎;Disabled:支持,但已被禁用;
Comment:存储引擎详细说明;
Transactions:是否支持事务;
XA:是否支持XA事务;
Savepoints:是否支持保存点;
InnoDB存储引擎
- MySQL5.5.5之后的默认存储引擎;
- 支持事务特性;
- 支持行锁及select操作的非锁定读;
- 支持外键;
MyISAM存储引擎
- 基于ISAM存储引擎扩展;
- 具有较好的插入及查询性能;
- 每个表的最大索引数是64;每个索引最大的列数是16;
- 可以索引BLOB、TEXT字段;
- 每个MyISAM表,都有一个内部auto_increment列;
- 可以把数据文件和索引文件放在不同的目录;
- 每个字段可以设置不同的字符集;
- varchar和char字段可以存储64KB的数据;
Memory存储引擎
- 数据存储在内存中,为查询提供快速访问性能。
- 每个表的最大索引数是32;每个索引最大的列数是16;
- 不支持BLOB 、TEXT字段;
- 当数据不再需要时,可以使用DELETE或TRUNCATEd清空整个表;
Archive存储引擎
- 主要用于数据归档;
- 只支持insert、replace和select;
- 支持行级锁和专用的缓存区,可实现高并发;
- 只允许在自增ID列上加索引;
- 支持分区,不支持事务处理;
- 插入快、查询快、占用空间小;
- 使用zlib无损数据压缩算法,压缩率非常好;因此,磁盘I/O更少,数据移植效率高;
- 数据存储在.ARZ为后缀的文件中;
存储引擎的选择
不同存储引擎都有各自的特点,以适应不同的使用需求。使用合适的存储引擎,可以提高整个数据库的性能表现。
功 能 | InnoDB | MYISAM | Memory | Archive |
---|---|---|---|---|
存储限制 | 64TB | 256TB | 受限于RAM大小 | None |
支持事务 | Yes | No | No | No |
支持全文索引 | No | Yes | No | No |
支持数索引 | Yes | Yes | Yes | No |
支持哈希索引 | No | No | Yes | No |
支持数据缓存 | Yes | No | N/A | No |
支持外键 | Yes | No | No | No |
存储引擎选择Tips:
- 如果需要事务能力,并要求实现并发控制,选择InnoDB;
- 如果仅仅用来插入和查询数据,MyISAM能提供较好的性能;
- 如果只是临时存放数据且数据量不大,也不需要较高的数据安全性,可以选用Memory;
- 如果只有插入和查询操作,可以选用Archive。Archive支持高并发插入,非常适合存储日志及归档数据;
本站所有内容均为原创,本站保留所有权利。仅允许非商业用途的转载,但必须注明来源网站、作者、来源链接!否则,由此造成的一切后果,由转载方承担!
干货分享、技术提升、面试笔试、学习交流,欢迎关注公众号:xuesql。QQ学习交流群:209942678。