首页 > 代码库 > MySQL存储引擎概述

MySQL存储引擎概述

一、MySQL支持插件式存储引擎,默认包括有多种存储引擎,还可以自己定制化引擎,引擎是在表级别设置的。

二、各种存储引擎的特性

技术分享

  (A) MyISAM :不支持事务、不支持外键、访问速度快。

    每个MyISAM表在磁盘上存储成3个文件,文件名与表名相同,扩展名是:

    (A1) frm (存储表定义)

    (A2) MYD (MYData, 存储数据)

    (A3) MYI (MYIndex, 存储索引)

    数据文件和索引文件可以放置在不同的目录,平均分布IO,获得更快的速度。可以在创建表的时候,指定该表的 DATA DIRECTORY

 和 INDEX DIRECTORY 语句来分别指定路径。

    MyISAM表可能损坏,可以通过工具检测和修复,表损坏可能导致数据库异常重新启动,需要尽快修复。支持三种存储格式,分别是:

    静态(固定长度)表;字段都是非变长字段:存储速度快,容易缓存,故障易恢复,占用空间多。注意:会去除字段的尾部空格

    动态表;包含变长字段,可能产生碎片,需定期优化表。占用空间较多,故障不易恢复。

    压缩表;由 myisampack 工具创建,占用空间非常小,每个记录单独压缩,非常小的访问开支。

  (B) InnoDB :支持事务、支持外键,相比于MyISAM,写入速度稍差一些,占用空间稍多一些。

  注意:使用 LAST_INSERT_ID() 查询的只是当前线程最后插入记录使用的值,并不是数据库中最后插入记录使用的值。

  外键关联时:四种索取类型:

    RESTRICT:限制在子表有关联记录的情况下,父表不能更新或者删除;

    NO ACTION:限制在子表有关联记录的情况下,父表不能更新或者删除;

    CASCADE:表示父表在更新或删除时,相应地更新和删除子表的记录。

    SET NULL:表示父表在更新或删除时,子表的对应字段被SET NULL。

  当某个表被其他表创建了外键参照,那么该表的对应索引或者主键禁止被删除。

  可以暂时关闭外键的检测:SET FOREIGN_KEY_CHECKS=0。

  InnoDB存储表和索引有两种方式:

    使用共享表空间存储,表结构在 .frm 文件中,数据和索引文件在 innodb_data_home_dir 和 innodb_data_file_path 定义的表空间中,可以是多个文件。

    使用多表空间存储,表结构在 .frm 文件中,每个表的数据和索引单独在 .ibd 中。如果是分区表,这每个分区对应单独的 .ibd 文件,文件名是“表名+分区名", 可以指定每个分区的数据文件位置。

    注意:即使在多表空间的存储方式下,共享表空间还是必须的,InnoDB把内部数据词典和未作日志放在这个文件中。

  (C) MEMORY:使用内存中的内容来创建表。访问速度快,默认是HASH索引,数据不可持久化。

    每个MEMORY表只对应一个磁盘文件,格式是 .frm。

    每个MEMORY表的数据量大小,受到 max_heap_table_size 系统变量的约束,初始大小是16MB。

    MEMORY表通常用于内容变化不频繁的转换码表,统计操作的中间结果表。注意该表数据的不持久化特性。

  (D) MERGE:其实就是对多个结构完全相同的MyISAM表的合并表示。

    

 

MySQL存储引擎概述