MySQL常用存储引擎之MyISAM
1、MySQL5.5之前版本默认存储引擎
临时表:在排序、分组等操作中,当数量超过一定的大小之后,由查询优化器建立的临时表。
2、MyISAM存储引擎由MYD和MYI组成
3、特性
(1) 并发性与锁级别
MyISAM使用的是表级锁,也就意味着在对表中的数据进行修改时,需要对整个表进行加锁。而在对表中的数据进行读取时,也需要对所有的表加共享锁。读取和写入这两种操作是互斥的,当然在一些情况下我们对表的数据进行读取时,也可以在表的末尾插入数据。由此可以看出,MyISAM对读写混合的并发性并不是太好,如果只是只读的话,就并发性而言,还是可以接受的,因为共享锁不会阻塞共享锁。
(2) 表损坏修复
MyISAM支持由于任意意外关闭而损坏的MyISAM表进行检查和修复操作。这里所说的修复并不是事务恢复,因为MyISAM并不是一种事物型的存储引擎,所以它也不可能进行事务恢复所需要的相关日志。
a、 创建数据库:
CREATE DATABASE IF NOT EXISTS my_db default charset utf8 COLLATE utf8_general_ci;
b、创建表:
use test;
create table myIsam(id int, c1 varchar(10))engine=myisam;
c、查看文件系统中myIsam是如何存储的:
myIsam.frm:存储表的结构信息
myIsam.MYD:存储表的数据信息
myIsam.MYI:存储表的索引信息
d、对表进行检查修复:
方式一:
检查:check table myIsam;
修复:repair table myIsam;
方式二:
myisamchk --help(需要停掉MySQL服务,否则可能会对表造成更大的损坏)
(3) MyISAM表支持的索引类型
MyISAM表支持全文索引,支持对BLOB,TEXT,或者很长的VARCHAR类型的字段建立前500个字符的前缀索引。
(4) MyISAM表支持数据压缩
如果MyISAM表是一张很大的只读表,也就是在表创建完并导入数据后,就不会对表进行任何修改操作,那么我就可以对表进行压缩操作。这样可以减少磁盘IO。
命令行:myisampack(由于表中数据的压缩是独立进行压缩的,所以在读取单行数据的时候,不用对整个表进行解压)
对于压缩的表只能进行读操作:
4、限制
版本<MySQL5.0时默认表大小为4G,如修改大表则需要修改MAX_Rows和AVG_ROW_LENGTH
版本>MySQL5.0时默认支持为256TB
5、适用场景:
. 非事物型应用( MyISAM不支持事务)
. 只读类应用
. 空间类应用(如存储GPS数据,支持空间函数,可应用空间函数对数据进行计算)