美文网首页PHP开发PHP经验分享
MySQL进阶之存储引擎

MySQL进阶之存储引擎

作者: 怀老师 | 来源:发表于2020-04-10 23:01 被阅读0次

首先,show engines \G查看当前支持的存储引擎。

MyISAM和InnoDB的优缺点

MyISAM有存储限制,不支持事务,支持表锁,支持B树索引,不支持哈希索引,支持全文索引,不支持集群索引,不支持数据缓存,支持索引缓存,支持数据可压缩,空间使用低,内存使用低,批量插入的速度高,不支持外键。

InnoDB存储限制64TB,支持事务,支持行锁,支持B树索引,不支持哈希索引,不支持全文索引,支持集群索引,支持数据缓存,支持索引缓存,不支持数据可压缩,空间使用高,内存使用高,批量插入速度低,支持外键。

关于MyISAM

1.是MySQL5.1之前的默认存储引擎,使用show variables like '%engine%';可以查看当前的默认存储引擎。不支持事务和外键,优势是访问的速度快,占用资源少,对事务完整性没有要求或者以SELECT、INSERT为主的应用基本上都可以使用这个引擎来创建表。

2.每个MyISAM在磁盘上存储成3个文件,文件名和表名相同,但扩展名分别是.frm(framework存储表定义).MYD(MyDATA,存储数据).MYI(MYIndex,存储索引)

3.数据文件和索引文件可以放置在不同的目录,平均分布IO,获得更快的速度。

4.要指定索引文件和数据文件的路径,需要在创建表时通过DATA DIRECTORY和INDEX DIRECTORY语句指定,文件路径是绝对路径,并且需要访问权限。

5.MyISAM类型的表可能会损坏,损坏后的表会提示需要修复或者访问后返回错误的结果。可以用check table语句来检查MyISAM表的健康,并用repair table语句修复一个损坏的MyISAM表。

6.MyISAM的表又支持3种不同的存储格式,分别是:静态(固定长度)表;动态表;压缩表;

  6.1:静态表是默认存储格式,字段都是非变长字段,但是占用空间通常比动态表多,静态表的数据在存储时会按照列的宽度定义补足空格。但是返回时却不会得到。需要注意,本来就有空格时怎么处理。

  6.2动态表包含变长字段,占用空间相对较少,但是频繁的更新删除记录会产生碎片,需要定期执行optimize table语句来改善性能,并且出现故障时恢复相对困难。

  6.3压缩表时有myisampack工具创建,占据非常小的磁盘空间。

7.离散型不需要事务的还是可以用的,比 InnoDB快一点

关于InnoDB

1.MySQL5.1之后改成了InnoDB为默认存储引擎;

2.使用多表空间存储时生成2个文件.frm存储表结构 .ibd存储数据和索引

3.用于事务处理应用程序,支持外键。如果应用对事务的完整性有比较高的要求,在并发条件下要求数据的一致性,数据操作除了插入和查询以外,还包括很多的更新、删除操作,那么InnoDB 存储引擎应该是比较合适的选择。

扩展:

使用OPTIMIZE table test;可以会回收空间和磁盘碎片,对含有TEXT 和BLOB 字段的表,如果经常做删除和修改记录的操作要定时执行。

相关文章

网友评论

    本文标题:MySQL进阶之存储引擎

    本文链接:https://www.haomeiwen.com/subject/ymbjmhtx.html