当前位置 博文首页 > 文章内容

    MySQL学习笔记(7):存储引擎

    作者: 栏目:未分类 时间:2020-06-30 9:19:21

    本站于2023年9月4日。收到“大连君*****咨询有限公司”通知
    说我们IIS7站长博客,有一篇博文用了他们的图片。
    要求我们给他们一张图片6000元。要不然法院告我们

    为避免不必要的麻烦,IIS7站长博客,全站内容图片下架、并积极应诉
    博文内容全部不再显示,请需要相关资讯的站长朋友到必应搜索。谢谢!

    另祝:版权碰瓷诈骗团伙,早日弃暗投明。

    相关新闻:借版权之名、行诈骗之实,周某因犯诈骗罪被判处有期徒刑十一年六个月

    叹!百花齐放的时代,渐行渐远!



    本文更新于2019-06-23,使用MySQL 5.7,操作系统为Deepin 15.4。

    和大多数数据库不同,插件式存储引擎是MySQL最重要的特性之一。

    InnoDB

    InnoDB表提供事务安全。

    InnoDB表支持外键。创建外键时,要求父表必须有对应的索引,子表在创建外键时也会自动创建对应的索引。如父表被子表创建了外键索引,则父表的索引禁止被删除。在导入多个表的数据时,或在执行LOAD DATAALTER TABLE操作的时候,可以使用SET foreign_key_checks=0关闭外键检查。执行完后,使用SET foreign_key_checks=1重新打开。

    InnoDB表自动增长列必需是索引,或组合索引的第一列。

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

    • 使用共享表空间存储:表结构保存在.frm文件中,数据和索引保存在innodb_data_home_dirinnodb_data_file_path定义的表空间中,可以是多个文件。
    • 使用多表空间存储:表结构保存在.frm文件中,每个表的数据和索引单独保存在.ibd文件中。如果是分区表,则每个分区对应单独的.ibd文件,文件名为“表名+分区名”,可以在创建分区的时候指定每个分区的文件位置。共享表空间仍然是必须的,InnoDB把内部数据词典和在线重做日志放在共享表空间中。

    使用参数innodb_file_per_table可指定是否使用多表空间存储,并在重启服务器后,只且只对新建的表生效。使用多表空间存储的表,不能直接复制.frm和.ibd文件进行恢复,因为没有共享表空间的数据字典信息。但如恢复表到原来的数据库,可使用ALTER TABLE tablename DISCARD TABLESPACEALTER TABLE tablename IMPORT TABLESPACE

    InnoDB表没有表元数据的缓存(如行数,因而执行COUNT(*)较慢)。

    MyISAM

    MyISAM表不支持事务,也不支持外键。

    MyISAM表自动增长列可为组合索引的非第一列。

    每个MyISAM在磁盘上存储成3个文件,数据文件和索引文件可以放置在不同的目录(需在创建表时通过DATA DIRECTORYINDEX DIRECTORY指定)。其文件名和表名相同,扩展名分别是:

    • .frm:存储表定义。
    • .MYD:MYData,存储数据。
    • .MYI:MYIndex,存储索引。

    MyISAM表支持3种不同的存储格式:

    • 静态表:默认的存储格式,每条记录都是固定长度的。
    • 动态表:记录不是固定长度的,包含变长字段。
    • 压缩表:由myisampack工具创建,每条记录都被单独压缩。

    MyISAM表有表元数据的缓存(如行数,因而执行COUNT(*)较快)。

    MERGE

    MERGE表是一组MyISAM表的组合,这些MyISAM表必须结构完全相同。MERGE表本身并没有数据,对其的任何操作实际上是对内部MyISAM表进行的。可以对MERGE表进行DROP操作,其只是删除表定义,对内部的表没有影响。

    MERGE表在磁盘中保存两个文件,文件名以表名开始,.frm存储表定义,.MRG包含组合表的信息,包括MERGE表由哪些表组成、插入新数据时的依据。可以通过修改.MRG文件来修改MERGE表,但修改后需使用FLUSH TABLES刷新。

    MEMORY

    MEMORY表的数据放在内存中,每个MEMORY表只对应一个.frm磁盘文件。

    在启动MySQL服务时使用--init-file选项,把INSERT INTO ... SELECTLOAD DATA INFILE写入文件中,就可在服务启动时从持久稳固的数据源装载表。定义MEMORY表的时候可通过MAX_ROWS指定表的最大行数。

    NDB

    NDB存储引擎在MySQL Cluster中使用。

    常用存储引擎对比

    特点 InnoDB MyISAM MERGE MEMORY NDB
    存储限制 64TB 没有
    事务安全 支持
    锁机制 行锁 表锁 表锁 表锁 行锁
    B树索引 支持 支持 支持 支持 支持
    哈希索引 支持 支持
    全文索引 支持
    集群索引 支持
    数据缓存 支持 支持 支持
    索引缓存 支持 支持 支持 支持 支持
    数据可压缩 支持
    空间使用 N/A
    内存使用 中等
    批量插入速度
    支持外键 支持