myisam 是 isam 的 mysql 扩展 . 除非修改配置,一般来说 myisam 是默认的存储引擎 .
只能够进行表锁,不支持行锁。在进行读取操作时不会影响到其他用户其他的读取操作,因而有比较好的并发性。但是在执行写入操作时,会产生一个“排他锁”,其他用户的的读写操作都无法执行。因此如果一张表的查询很慢,经常发生等待,可能不是因为查询语句有问题执行比较慢,而是因为这张表同时执行了大量的写操作。总结起来,读操作和读操作之间是并行的,但是写操作和其他操作是串行的。
在以上基础上 myisam 还具有一个特性 : 并发插入( concurrentInsert )。该特性允许用户在读取一张表时,同时 insert 一条语句,不过 update 等其他写操作时不允许的。
myisam 的并发插入特性是可以控制的。可以通过修改 my.cnf 文件中的 concurrent_insert 参数设置并发插入的级别:
concurrent_insert = 0 并发插入特性关闭
concurrent_insert = 1 当 MyISAM 存储引擎表数据文件中不存在空洞(表中间没有被删除的行)时,可以在表的末尾插入数据
concurrent_insert = 2 无论有没有空洞,都可以在表的末尾插入数据
MySQL 支持对 my isam 的自动检查和修复
用户可以使用 check table xxx 和 repair table xxx 命令实现对 my isam 表的检查和修复。
用户可以使用 myisamchk 工具来检查或修复 myisam 表,也可以使用 myisampack 来压缩 myisam 表,让它们占更少的空间。
myisam是不支持事务(TST)的。所以在牺牲了安全的同时,相较于事务安全的数据库引擎,myisam更快,占用更少的存储空间,执行命令所需要的内存更少。
my isam 的数据库表有三个文件构成,数据结构是frm后缀的文件 (frm 是通用的数据结构文件 ) ,数据文件是MYD (MY Data ) 后缀的文件,索引是MYI (MYIndex) 后缀的文件。这些文件的文件名是相同的。
myisam提供全文检索能力
myisam支持大文件,且text和blob列可以被索引.当然不是完全作为索引,只有前500字节可以作为索引.
myisam支持optimize table命令,这是因为myisam的索引文件和数据文件是分离的。
myisam有三种存储格式,分别是静态,动态和已压缩.
静态表是myisam的默认存储格式。当表中没有varchar,text,blob列时会自动使用这个格式。改存储格式的表会比较快,也比较容易恢复。
动态表是当表中有varchar,text,blob列时自动选择的。动态存储格式大部分时候比静态存储格式占用的空间更小,但是崩溃了也比较难恢复。
已压缩存储格式只能通过myisampack工具建立。它占得空间自然是最小的。
http://dev.mysql.com/doc/refman/5.1/zh/storage-engines.html#myisam-storage-engine