什么是数据库引擎
数据库引擎,也称为存储引擎(Storage Engine),是数据库管理系统(DBMS)对数据库中的数据做CRUD操作的底层软件组件。大多数数据库管理系统有自己的API,用户可以直接与底层引擎进行交互,而不需要去使用DBMS的用户接口。
本文简单介绍两个主要MySQL引擎InnoDB和MyISAM的区别。
查看引擎
1 | show engines; |
结果为mysql支持的数据库引擎列表信息,略。
InnoDB和MyISAM
InnoDB
InnoDBInnoDB是MySQL的一种数据库引擎,MySQL5.5及之后的版本将其作为默认引擎。它服从和提供了标准的ACID事务特征和外键支持。
- InnoDB支持行级别的锁。
- InnoDB在设计时主要考虑处理量级较大数据时的性能最优化。
- InnoDB支持外键,因此我们把使用InnoDB的MySQL称为关系数据库管理系统(RDBMS)。
- InnoDB在表空间中存储数据和索引。
- InnoDB支持事务,用InnoDB,你可以在提交和回滚。
- InnoDB在MySQL5.6之后也支持全文索引。
- InnoDB默认将所有数据存储在一个文件中(可以在创建表时通过设定innodb_file_per_table选项来设定文件数)。
MyISAM
MyISAM在MySQL5.5版本之前是默认的数据库引擎,它基于更老的ISAM码,但是MyISAM有许多实用的扩展。
- MyISAM支持表级别的锁。
- MyISAM在设计时主要考虑速度。
- MyISAM不支持外键,因此我们把使用MyISAM的MySQL称为数据库管理系统(DBMS)。
- MyISAM在磁盘空间上用三个不用的文件分别存储表,数据,和索引,三个文件依次是tablename.FRM,tablename.MYD, tablename.MYI。
- MyISAM不支持事务,用MyISAM,你不能提交和回滚,当你执行了一条命令,就已经永久生效了。
MyISAM支持全文索引。 - 当表存在大量查询而只有少量更新和删除时,推荐使用MyISAM。
MyISAM是由Oracle开发的。据说MyISAM整体上更快,因为它的结构更简单,占用的资源更少。
如何选择
在上文的区别对比中我们看到,有一些InnoDB的特性是MyISAM没有的。二者的主要区别在于,InnoDB支持外键和事务,而MyISAM不支持。
当我们做选择时,首先确定我们是否需要使用外键和事务,如果可以不用,MyISAM才能在考虑范围之内。
如果数据单一,而自己又很在意MyISAM的细微的优点,可以选择MyISAM,但并不是所有情况下MyISAM的读取速度都更优。
大多数情况下都建议使用InnoDB。
参考3中有较详细的基本性能对比测试报告。