1. mysql 5.5之前版本默认存储引擎
1.1 因为这个原因现在还有大量服务器在使用这myisam引擎的表
1.2 myisam是mysql大部分系统表和临时表使用的存储引擎
2. myisam存储引擎表由myd和myi组成
2.1 myd存储数据信息
2.2 myi存储索引信息
2.3 frm记录表结构的,所有存储引擎都有的
3. 特性
3.1 并发性与锁级别
myisam使用的是表级锁, 而不是行级锁。这也就意味着对表数据进行修改时,需要对整个表进行加锁。而在对表中的数据进行读取时,也需要对所有表加共享锁。所以,使用myisam存储引擎的表,读取和写入这两种操作是互斥的。当然,在一些情况下,当我们对表中的数据进行读取时,也可以在表的末尾插入数据。因此,myisam对读写混合的并发性不是很好。如果知识制度的操作的话,就并发性而言,性能还是可以接受的。因为共享锁并不会阻塞共享锁。
3.2 表损坏修护
支持对意外关闭的表进行检查和修护操作,这里提到的修护,并不是事务恢复。因为myisam并不是一种事物存储引擎,所以它不可能提供事务恢复所需要的相关日志。所以注意了,对myisam表做数据恢复,可能会造成数据的丢失。对有问题的表可以使用
check table tablename 进行检查
repair table tablename 进行修护
除了上诉命令,mysql还提供了修护工具,叫做myisamchk( 如果使用,则需要停止mysql服务),如果不停止使用这个工具,可能造成更大的损坏。
3.3 myisam表支持的索引类型
myisam表支持全文索引,是 mysql5.7之前唯一支持全文索引的官方存储引擎。支持text或block等字段前500个字符的前缀索引,若果myisam是一张很大的只读表的话,在表创建完,导入数据后,就不会在对表进行任何修改操作,那么我们可以对这样的表进行压缩操作,这样可以减少磁盘io。
3.4 myisam表支持数据压缩
对于表中数据压缩是独立进行压缩的,所以在读取单行数据的时候,不必对整个表来进行解压
myisampack 压缩表
4. 限制
4.1 版本< mysql5.0时默认表大小为4g
若果存储大表则要修改 max_rows 和 avg_row_length , 这两个数相乘的大小,就是表达到的大小。对于大表来说,修改这两个参数会导致表重建,可能需要一些时间。
4.2 版本 >mysql5.0时默认支持为256tb
5. 适用场景
5.1 非事务型应用
myisam本身时一种非事务型存储引擎,也就是说myisam是不支持事务的。
5.2 只读类应用
因为可以对表进行压缩,压缩后只读。
5.3 空间类应用
在mysql5.7之前,myisam是唯一支持空间函数的存储引擎。如果需要存储空间类数据,使用空间函数,只能使用myisam存储引擎。