MySQL引擎之MyISAM
- MyISAM引擎作为MYSQL5.5版本之前的默认存储引擎
- MyISAM管理非事务表、是ISAM 的扩展格式,成功创建表后将会生成MYD(数据文件)和MYI(索引文件)两个文件
- 除了提供ISAM里所没有的索引的字段管理等的大量功能、MyISAM 还使用一种表格锁定的机制、来优化多个并发的读写操作。MyISAM 提供高速存储和检索、以及全文搜索能力
什么是锁
- 锁主要作用是管理共享资源的并发访问
- 锁用于实现事务的隔离性
锁的类型
- 共享锁(也称读锁):针对同一份数据,多个读操作可以同时进行而且不会相互影响
- 独占锁(也称写锁):当前写操作没有完成之前,会阻断所有要进行读写的操作
锁的粒度
- 表级锁
- 行级锁
MyISAM存储引擎特性
- 不支持事务、不具备AICD特性(原子性、一致性、分离性、永久性)
- 表级别锁定形式(更新数据时锁定整个表、这样虽然可以让锁定的实现成本很小但是同时大大降低了其并发的性能)
- 读写相互阻塞(不仅会在写入的时候阻塞读取、还会在读取的时候阻塞写入、但是读取不会阻塞读取)
- 只会缓存索引(
myisam
通过key_buffer_size
来设置缓存索引,提高访问性能较少磁盘IO的压力、但是只缓存索引、不缓存数据) - 读取速度快、占用资源比较少
- 不支持外键约束、只支持全文检索
- 表损坏修复
- MyISAM表支持数据压缩
myisampack -b -f myIsam.MYI
MyISAM存储引擎限制
- 版本小于MySQL5.0时默认表大小为4G,如存储大表则要修改MAX_Rows和AVG_ROW_LENGTH
- 版本大于MySQL5.0时默认支持256TB
存储文件
每一个MyISAM的表都对应硬盘上的三个文件(同一文件名、不同扩展名):
- .frm:保存表的定义、这个文件不是MyISAM引擎的一部分、而是数据库服务器的一部分
- .MYD:保存表的数据
- .MYI:保存表的索引文件