建表的时候会选择数据库引擎,常用的有MyISAM和InnoDB,到底选哪个呢?
参考文献:
- http://drizzlewalk.blog.51cto.com/2203401/443266
- http://www.rackspace.com/knowledge_center/article/mysql-engines-myisam-vs-innodb
- http://stackoverflow.com/questions/20148/myisam-versus-innodb
- http://www.pureweber.com/article/myisam-vs-innodb/
什么是MyISAM?
MyISAM是MySQL关系数据库管理系统的默认储存引擎。这种MySQL表存储结构从旧的ISAM代码扩展出许多有用的功能。在新版本的MySQL中,InnoDB引擎由于其对事务,参照完整性,以及更高的并发性等优点开始广泛的取代MyISAM。
每一个MyISAM表都对应于硬盘上的三个文件。这三个文件有一样的文件名,但是有不同的扩展名以指示其类型用途:.frm文件保存表的定义,但是这个文件并不是MyISAM引擎的一部,而是服务器的一部分;.MYD保存表的数据;.MYI是表的索引文件。
什么是InnoDB?
InnoDB是MySQL的另一个存储引擎,正成为目前MySQL AB所发行新版的标准,被包含在所有二进制安装包里。较之于其它的存储引擎它的优点是它支持兼容ACID的事务(类似于PostgreSQL),以及参数完整性(即对外键的支持)。
Oracle公司与2005年10月收购了Innobase。Innobase采用双认证授权。它使用GNU发行,也允许其它想将InnoDB结合到商业软件的团体获得授权。
MyISAM vs Innodb – Quick comparison Table | 快速比较表:
MyISAM | Innodb |
---|---|
Not *ACID compliant and non-transactional | *ACID compliant and hence fully transactional with ROLLBACK and COMMIT and support for Foreign Keys |
MySQL 5.0 Default Engine | Rackspace Cloud Default Engine |
Offers Compression | Offers Compression |
Requires full repair/rebuild of indexes/tables | Auto recovery from crash via replay of logs |
Changed Db pages written to disk instantly | Dirty pages converted from random to sequential before commit and flush to disk |
No ordering in storage of data | Row data stored in pages in PK order |
Table level locking | Row level locking |
-
- ACID – Atomicity, Consistency, Isolation, Durability (read more on it here:http://en.wikipedia.org/wiki/ACID)
在StackOverflow上的小总结:
Frequent reading, almost no writing 常有读取操作,几乎没有写操作=> MyISAM Full-text search in MySQL <= 5.5 => MyISAM
InnoDB的设计目标是处理大容量数据库系统,它的CPU利用率是其它基于磁盘的关系数据库引擎所不能比的。