美文网首页程序员
InnoDB 和MyISAM 存储文件详解

InnoDB 和MyISAM 存储文件详解

作者: 十年磨一剑1111 | 来源:发表于2020-05-20 15:27 被阅读0次

    下面的测试是基于MySQL 8.0。

    1. InnoDB 存储引擎

    InnoDB 存储引擎分两种情况:
    1) 共享表空间
    如果是共享表空间的话,所有基于InnoDB存储引擎的表数据都会记录在该共享表空间中,比如ibdata1,ibdata2,ibdata3 ...,ibdataN 等这些文件中。具体的可以进行配置:

    Innodb默认配置.png
    这是Innodb 默认的表空间配置,也可以对innodb_data_file_path进行配置,比如设置:innodb_data_file_path = ibdata1:200M;ibdata2:500M:autoextend,需要注意的是这里只有ibdata2 会自动增长,如果500M空间用完了的话。
    2) 独立表空间
    若设置参数innodb_file_per_table=on,则用户可以将每个基于InnoDB存储引擎的表产生一个独立表空间。独立表空间的命名规则为:表名.ibd,通过这样的方式用户不用将所有的数据都存放于默认的表空间中。
    Innodb独立表空间配置.png
    我这边是打开的,那么下面我们进入数据目录看下存储文件。
    ibd文件.png
    发现每张表都生成了一个以表的名称命名的.ibd 文件,不过需要注意的是,这些单独的表空间文件仅存放该表的数据、索引和插入缓冲BITMAP等信息,其余信息还是存放在默认的表空间中。
    思考:
    1. 小伙伴可能会想共享表空间有没有大小限制还有独立表空间呢?
      共享表空间由于可以指定多个存储文件,并且可以存储在不同的磁盘上,所以从某种程度来讲,共享表空间不受文件大小的限制,而是其自身的限制。看下官方文档上的描述:


      Innodb表空间大小限制.png

    这句话的意思大概是独立表空间的大小限制是64TB,相比之下,独立表空间每张表的大小限制也是64TB。

    1. 这两种形式的存储方式各有哪些优缺点呢?
      a. 共享表空间
      优点:
      (1)由于文件可以指定多个目录,所以其大小不受文件大小限制的。
      (2)表数据和表描述放在一起方便管理
      缺点:
      所有的数据和索引存放到一个文件中,将有一个很大的文件,虽然可以把一个大的文件分成多个小的文件,但是多个表及索引在表空间中混合存储,这样对于做了大量删除操作后表空间将会有大量的空隙。
      b. 独立表空间
      优点:
      (1) 每个表都有自己独立的表空间
      (2) 每个表的数据索引都会存在自己的表空间中。
      (3) 可以实现单表在不同的数据库中移动。
      (4)空间可以回收
      对于独立表空间的表,不管怎么删除,表空间的碎片不会太严重的影响性能,而且还要机会处理。
      (5)使用独立表空间的效率以及性能会高一点。
      缺点:
      单表增加过大,如超过100G:
      当使用独立表空间来存放Innodb的表的时候,每个表的数据以一个单独的文件来存放,这个时候的单表限制又变成了系统的大小限制了。需要注意的是不同的操作系统(其实是文件系统)对文件大小的限制是不同的。

    2. 1. MyISAM 存储引擎

    为了测试,笔者在这里先创建一张myisam表user2,下面进入数据目录查看下:


    myisam存储文件.png

    我们可以看到在创建了一张myisam表后mysql帮我们创建了3个文件:user2_345.sdi,user2.MYD,user2.MYI。
    MYD: 是数据文件。
    MYI:是索引文件。
    sdi:这个文件小伙伴们可能比较陌生,SDI是Serialized Dictionary Information 的缩写,是MySQL8.0重新设计数据词典后引入的产物,我们知道MySQL8.0开始已经统一使用Innodb存储引擎来存储数据表的元数据(比如描述数据库事务支持情况等),但对于非Innodb存储引擎,MySQL提供了另外一种可读的文件格式来描述表的元数据信息。
    思考:MyISAM存储文件大小限制?
    MyISAM 存储引擎的数据表它不能指定存储的文件,所有创建的表将会在指定的数据目录下,所以它势必会受到磁盘空间大小的限制,另外,MySQL数据库的MyISAM存储 引擎单表大小限制已经不是有MySQL数据库本身来决定(限制扩大到64pb),而是由所在主机的OS上面的文件系统来决定了。
    今天的文章就写到这里吧,有需要补充的小伙伴欢迎在下面给我留言,看到会及时回复。

    相关文章

      网友评论

        本文标题:InnoDB 和MyISAM 存储文件详解

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