mysql的存储引擎包括:MyISAM、InnoDB、BDB、MEMORY、MERGE、EXAMPLE、NDBCluster、ARCHIVE、CSV、BLACKHOLE、FEDERATED等,其中InnoDB和BDB提供事务安全表,其他存储引擎都是非事务安全表。
MyISAM引擎是不支持事务的。如果你在使用Spring+Hibernate事务回滚无效。可以联想一下mysql使用的引擎是那种。
InnoDB存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全。但是对比Myisam的存储引擎,InnoDB写的处理效率差一些并且会占用更多的磁盘空间以保留数据和索引。
Innordb的功能要比myiasm强大很多,但是innordb的性能要比myisam差很多。
如果只是做简单的查询,更新,删除,那么用myiasm是最好的选择。
如果你的数据量是百万级别的,并且没有任何的事务处理,那么用myisam是性能最好的选择。
Innordb的表的大小更加的大,用myisam可以省很多的硬盘空间。
在测试的这个40w的表中,表占用空间的情况如下:
引擎类型 MyIsam InnorDB
数据 53,924 KB 58,976 KB
索引 13,640 KB 21,072 KB
占用总空间 67,564 KB 80,048 KB
另外一个180W万记录的表, 表占用空间的情况如下:
引擎类型 MyIsam InnorDB
数据 56,166 KB 90,736 KB
索引 67,103 KB 88,848 KB
占用总空间 123,269 KB 179,584 KB
总结:一般来说,MYisam引擎比较常用。
适合:
1. 做很多count 的计算。
2. 插入不平凡,查询非常频繁。
3. 没有事务
innordb 适合:
1. 可靠性要求比较高,或者要求事务。
2. 表更新和查询都相当的频繁,并且表锁定的机会比较大的情况。
但大多数情况中,sql优化还是很重要的。