mysql学习->存储引擎(Myisam)
查看当前的mysql存储引擎:show engines \G或者show variables like 'have%';
以上两种方法查看当前的数据库支持哪些存储引擎,其中DISAVLED的记录表示支持该存储引擎,但是数据库启动的时候被禁用
在创建新表的时候可以通过ENGINE关键字来设置新建表的存储引擎,不设置的时候会默认当前数据库默认的引擎,可以设置的
可以用alter table 数据库定义语句来修改引擎:alter table t1 engine = innodb;
存储引擎之间的区别
特点 |
Myisam |
innodb |
MENORY |
MERGE |
NDB |
存储限制 | 有 | 64TB | 有 | 没有 | 有 |
事务安全 | 支持 | ||||
锁机制 | 表锁 | 行锁 | 表锁 | 表锁 | 行锁 |
B树索引 | 支持 | 支持 | 支持 | 支持 | 支持 |
哈希索引 | 支持 | 支持 | |||
全文索引 | 支持 | ||||
集群索引 | 支持 | ||||
数据缓存 | 支持 | 支持 | 支持 | ||
索引缓存 | 支持 | 支持 | 支持 | 支持 | 支持 |
数据可压缩 | 支持 | ||||
空间使用 | 低 | 高 | N/A | 低 | 低 |
内存使用 | 低 | 高 | 中等 | 低 | 高 |
批量插入的速度 | 高 | 低 | 高 | 高 | 高 |
支持外键 | 支持 |
Myisam引擎:
Myisam是mysql的默认引擎,Myisam不支持事务,也不支持外键,其优势是访问的速度,对事务完整性没有要求或者以SELECT,INSERT为主的应用基本上都可以使用这个引擎来创建表
每个Myisam引擎在磁盘上存储成3个文件,其文件名都和表名相同,但扩展名分别是
.frm(存储定义)
.MYD(MYDdata,存储数据)
.MYI(MYIndex,存储索引)
数据文件和索引文件可以放置在不同的目录,平均分布IO,获得更快的速度
要制定索引文件和数据文件的路径,需要在创建表的时候通过DATA DIRECTORY和INDEX DIRECTORY语句指定,也就是说不同Myisam表的索引文件和数据文件可以放置到不同的路径下,文件路径需要的是绝对路径,并且具有访问权限
注意:Myisam类型的表可能会损坏,原因会有很多种,损坏后的表不能访问,会提示需要修复或者访问后返回错误结果,可以使用CHECK TABLE语句来检查Myisam表的健康,并用REPAIR TABLE 语句修复一个损坏的Myisam表。
Myisam引擎的表还支持3种不同的存储格式
静态(固定长度)表:静态表为默认的存储格式,静态表中的字段都非变长字段,都是固定长度,优点是存储非常迅速,容易缓存,出现故障容易回复,缺点是占用的空间比动态多,静态表的数据会根据列的宽度来补足空格,但是在应用访问的时候不会得到这些空格~
最值得注意的是如果需要保存的内容后面本来就带有空格,那么在返回的时候也会被去掉
动态表中包含变长字段,记录不是固定长度的,这样存储的优点是占用的空间相对较少,但是长期频繁的更新和删除记录会产生碎片,需要定期执行OPTIMIZE TABLE语句或myisamchk-r命令来改善性能,并且在出现故障时恢复相对比较困难
压缩表myisampack工具创建,占据非常小的磁盘空间,因为每个记录是被单独要锁的,所以访问只有非常小的访问开支。