MySQL常用存储引擎

 

MyISAM:

  • MySQL默认数据库引擎,不支持事务、外键,速度快,用于无事务要求或者select、insert为主的场景。
  • 会创建3个文件.frm(存储表定义),.MYD(MYData,存储数据),.MYI(MYIndex,存储引擎)。
  • 支持3中存储格式,静态(固定长度)表,动态表,压缩表。
    • 静态表是默认格式,固定长度速度快,但是占空间大。记录长度不够时会用空格填充,读取数据时会清除空格,存在吃尾部空格的情况。
    • 动态表包含变长字段,记录不是固定长度,占用空间少,但是频繁更新和删除会产生随便,需要定期整理,并且在出现故障时恢复比较困难。
    • 压缩表由mysiampack工具创建,空间小。

InnoDB:

  • 提供了具有提交、回滚、崩溃恢复能力的事务安全,但是会占用更多空间用以保存数据和索引。
  • 支持外键,创建外键的时候,要求父表必须有对应的碎银,子表在创建索引的时候也会自动创建对应的索引。
  • 存储表和索引有两种方式,
    • 使用共享表空间存储,表结构保存在.frm文件中,数据和索引在innodb_data_home_dir和innodb_data_file_path定义的表空间中,可以是多个文件。
    • 使用多表空间存储,表结构保存在.frm文件中,每个表的数据和索引单独保存在.ibd中。

MEMORY:

  • 使用存在于内存中的内容来创建表,访问速度快,默认使用HASH索引,服务关闭数据会丢失。
  • 用于内容变化不频繁的代码表,或者作为统计操作的中间结果表。

MERGE:

  • 一组MyISAM表的组合,这些表必须结构完全相同。
  • MERGE表本身没有数据,CRUD时其实操作的是内部的MyISAM表。
  • Drop只是删除MERGE的定义,对于内部表没有影响。

 

posted on 2018-10-31 08:58  Lv Jianwei  阅读(2369)  评论(0编辑  收藏  举报