MySQL的存储引擎(2)—MyISAM存储引擎

在MySQL5.1及之前的版本,MyISAM是默认的存储引擎。MyISAM提供了大量的特性,包括全文索引、压缩、空间函数(GIS)等,但MyISAM不支持事务和行级锁,而且有一个毫无疑问的缺陷就是崩溃后无法安全恢复。正是由于MyISAM引擎的缘故,即使MySQL支持事务已经很长时间了,在很多人的概念中MySQL还是非事务型的数据库。尽管MyISAM不支持事务、不支持崩溃后的安全恢复,但它绝不是一无是处的。对于只读的数据,或者表比较小、可以忍受修复操作,则依然可以继续使用MyISAM。

MyISAM会将表存储在两个文件中:数据文件和索引文件,分别以.myd和.myi为扩展名。MyISAM表可以包含动态或静态(长度固定)行。MySQL会根据表的定义来决定采用何种行格式。MyISAM表可以存储的行记录数,一般受限于可用的磁盘空间,或者操作系统中单个文件的最大尺寸。

在MySQL5.0 中,MyISAM表如果是变长行,则默认配置只能处理256TB的数据,因为只想数据记录的指针长度是6个字节。而在更早的版本中,指针长度默认是4字节,所以只能处理4GB的数据。而所有的MySQL版本都支持8字节的指针。要改变MyISAM表指针的长度(调高或者调低),可以通过修改表的max_rows和avg_row_length选项的值来实现,两者相乘就是表可能达到的最大大小。修改这两个参数会导致重建整个表和表的所有空间,这可能需要很长时间来完成。

MyISAM特性:

  1. 加锁与并发:

        MyISAM对整张表加锁,而不是针对行。读取时会对需要读到的所有表加共享锁,写入时则对表加排他锁。但是在表有读取查询的同时,也可以往表中插入新的记录(这被称为并发插入,concurrent insert)

    2.修复:

    对于MyISAM表,MySQL可以手工或者自动执行检查和修复操作,但这里说的修复和事务恢复以及崩溃恢复是不同的概念。执行表的修复可能导致一些数据丢失,而且修复操作是非常慢的。可以通过check table mytable检查表的错误,如果有错误可以通过执行repair table mytable 进行修复。另外,如果MySQL服务器已经关闭,也可以通过myisamchk命令行工具进行检查和修复操作。

   3.索引特性:

    对于MyISAM表,即使是BLOB和text等长字段,也可以基于其前500个字符创建索引。MyISAM也支持全文索引,这是一种基于分词创建的索引,可以支持复杂的查询。

   4.延迟更新索引键:

    创建MyISAM表的时候,如果指定了delay_key_write选项,在每次修改执行完成时,不会立刻将修改的索引数据写入磁盘,而是会写到内存中的缓存区,只有在清理缓存区或者关闭表的时候才会将对应的索引块写入到磁盘中。这种方式可以极大的提升写入性能,但是在数据库或者主机奔溃时会造成索引的损坏,需要执行修复操作。延迟更新索引键的特性,可以在全局设置,也可以为单个表设置。

猜你喜欢

转载自blog.csdn.net/sinat_36564972/article/details/82225470