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则无此问题,但这并非因为它比较先进,这只是因为它不支援交易。