MySQL的默认存储引擎MyISAM一直都是MySQL非事务存储引擎的最佳选择。它在性能和可用特征之间,提供一种良好的均衡性,如全文索引、压缩、空间函数。MyISAM仅支持表锁,不支持行级锁。
加锁与并发
MyISAM对整张表加锁,而不是行。读取程序在需要读取数据时,在所有表上都可以获得共享锁(读锁),而写入程序可以获得排他锁(写锁)。用户在执行查询select语句时,可以同时在一张表内插入新数据,这也称读写并发,这是一个非常有用的特性。
自动修复
MySQL支持对MyISAM存储引擎的表进行自动检查与修复,如I/O调优。
手工修复
可以执行CHECK TABLE tab和REPAIR TABLE tab命令检查表中的错误,并修复错误。如果服务器离线还可以使用myisamchk命令行工具检查和修复表。
索引特性
在MyISAM存储引擎表中,用户可以基于BLOB或TEXT字段类型列的前500个字符创建相关索引。MyISAM支持全文索引,它可以根据个别单词为复杂的搜索选项创建索引。这一特性在博客文章系统中特别有用。
延迟更新索引
使用表创建选项DELAY_KEY_WRITE创建的MyISAM表,在查询结束后不会将索引的改变数据写入磁盘,而是写入内存键缓存区中缓存索引改变数据。它只会在清理缓冲区,或者关闭表时才将索引块转存到磁盘。对于数据经常改变,并且使用频繁的表,这种模式大大提高了表的处理能力。不过,如果服务器或系统崩溃,索引也会损坏,需要修复。可以使用脚本修复,如myisamchk工具,在重启服务器前进行修复,也可以使用自动恢复选项进行修复。延迟更新索引可以被全局设置,也可以单独为每张表设置。 |
|