MyISAM是mysql 默认存储引擎,它不支持事务,外键。但访问速度快,对事务完整性没有要求或者以select,insert 为主的应用基本上均可以使用这个引擎。
每一个MyISAM在磁盘上存储成3个文件,文件名都和表名相同,扩展分别是:
.frm(存储表定义)
.MYD(MYdata 存储数据)
.MYI( MYIndex 存储索引)
数据文件和索引文件能够放置在不一样的目录,平均分布IO,获取更快速度。mysql
1. 指定索引文件和数据文件的路径sql
在建立表的时候经过data directory和 index directory语句指定, 也就是不一样MyISAM表的索引文件和数据文件能够放置到不一样的路径下,文件路径须要是绝对路径,而且有访问权限缓存
-- 默认存储路径 SELECT @@datadir;
-- 首先要建立/ibddir目录,有5.6才支持单表指定目录 CREATE TABLE test_dir_table( strative_id VARCHAR(16) NOT NULL, date_id VARCHAR(8) NOT NULL PRIMARY KEY (strative_id) ) ENGINE=MYISAM DATA DIRECTORY = '/ibddir' INDEX DIRECTORY= '/ibddir';
2. 检查表的健康状态并发
表可能会损坏,缘由多种多样,check table对MYISAM和InnoDB表都有做用,如检查有异常使用(repair table表名;)来修复。工具
语法:
CHECK TABLE tbl_name[,tbl_name] ... [option] ...
option= {QUICK | FAST | MEDIUM | EXTENDED | CHANGED}spa
CHECK TABLE ai;
3. MYISAM表3种不一样的存储格式日志
3.1 静态(固定长度)表, 动态表, 压缩表。 其中静态表是默认的存储格式,字段都是非变长字段,每一个记录都是固定长度。这种存储方式的优势是存储很是迅速,容易缓存,出现故障容易恢复,缺点是空间占用多,存储时会按照宽度定义补足空格,但应用访问时并不会获得这些空格。
但有个注意是: 若是保存的内容后面原本就带有空格,在应用访问时也会被自动去掉,从而丢失了尾部空格 。code
CREATE TABLE Myisam_char (NAME CHAR(10)) ENGINE=MYISAM; INSERT INTO Myisam_char VALUES('abcde'),('abcde '),(' abcde'),(' abcde '); SELECT NAME,LENGTH(NAME) FROM Myisam_char;
从下面的输出看出,前面空格保留了。blog
3.2 动态表中包含变长字段,记录不是固定长度的,优点是占用的空间相对比较小,但频繁的更新删除记录会产生碎片,须要按期optimize table或myisamchk -r命令,出现故障时恢复相对比较困难。索引
3.3 压缩表由myisampack 工具建立,占据很是小的磁盘空间,每一个记录是被单独压缩的。
4.最后在回顾下myisam支持的特性
存储限制: “有”, 官方是256TB 锁机制 : "表锁" 适用于并发性低的场景 B树索引 : "支持" 全文索引 :"支持" 索引缓存 :"支持" 数据压缩 :"支持" 空间使用 :"低" 默认是静态存储空格 内存使用 :"低" 由于不支持数据缓存 批理插入的速度: "高" 由于不支持支持事务,不须要写入日志文件