MyISAM
資料庫引擎
MyISAM是MySQL的默认数据库引擎(5.5版之前),由早期的ISAM所改良。虽然性能极佳,但却有一个缺点:不支持事务处理(transaction)。不过,在这几年的发展下,MySQL也导入了InnoDB(另一种数据库引擎),以强化参照完整性与并发违规处理机制,后来就逐渐取代MyISAM。
开发者 | Sun Microsystems |
---|---|
操作系统 | 跨平台 |
类型 | 数据库引擎 |
许可协议 | GNU通用公共许可证 |
网站 | https://www.mysql.com |
每个MyISAM资料表,皆由存储在硬盘上的3个文件所组成,每个文件都以资料表名称为文件主名,并搭配不同扩展名区分文件类型:
.frm
--存储资料表定义,此文件非MyISAM引擎的一部分。.MYD
--存放真正的资料。.MYI
--存储索引资讯。
与InnoDB之比较
- InnoDB可借由事务记录档(Transaction Log)来恢复程序崩溃(crash),或非预期结束所造成的资料错误;而MyISAM遇到错误,必须完整扫描后才能重建索引,或修正未写入硬盘的错误。InnoDB的修复时间,大略都是固定的,但MyISAM的修复时间,则与资料量的多少成正比。相对而言,随着资料量的增加,InnoDB会有较佳的稳定性。
- MyISAM必须依靠操作系统来管理读取与写入的缓存,而InnoDB则是有自己的读写缓存管理机制。(InnoDB不会将被修改的数据页立即交给操作系统)因此在某些情况下,InnoDB的资料存取会比MyISAM更有效率。
- InnoDB目前并不支持MyISAM所提供的压缩与terse row formats,所以对硬盘与缓冲存储器的使用量较大。因此MySQL从5.0版开始,提供另一个负载较轻的格式,他可减少约略20%的系统负载,而压缩功能已计划于未来的新版中推出。
- 当操作完全兼容ACID(事务)时,虽然InnoDB会自动合并多个连接,但每次有事务产生时,仍至少须写入硬盘一次,因此对于某些硬盘或磁盘阵列,会造成每秒200次的事务处理上限。若希望达到更高的性能且保持事务的完整性,就必使用磁碟缓存与电池备援。当然InnoDB也提供数种对性能冲击较低的模式,但相对的也会降低事务的完整性。而MyISAM则无此问题,但这并非因为它比较先进,这只是因为它不支持事务。