MySQL——InnoDB引擎简介

1).InnoDB 引擎的优势

  1. 如果服务器意外宕机了,只需要重启数据库即可。InnoDB 意外恢复自动完成在意外之前没有提交的操作。
  2. InnoDB 存储引擎拥有独自的缓存池,缓存池缓存表数据和索引数据在内存中,使得使用数据可以像在内存中一样。在专用于数据存储的服务器中,建议分配百分之八十的内存给缓存池。
  3. 在实行分表时,可以设置相关的外键来实现参照完整,更新或删除数据,相关的数据也将会被自动的更新或删除。
  4. 如果在磁盘或内存的数据损坏,InnoDB 校验机制在你使用此数据之前会提醒你数据异常。
  5. 插入,更新,删除操作会被更新缓存执行,你可以同时对同一张表读和写,InnoDB 会缓存更新的数据至磁盘
  6. 当表中同一行数据经常被查询,Adaptive Hash Index 帮助这些查询更快。

2).InnoDB 体系结构

官方的体系图如下:
在这里插入图片描述

InnoDB 体系结构实际上由内存结构,线程,磁盘文件三层组成。

先了解InnoDB 的存储结构

InnoDB 存储结构

InnoDB 逻辑存储单元主要分为表空间,段,区,页。

层级关系为tablespace -> segment-> extent (64 个 page ,1mb)->page.

InnoDB 存储引擎表中所有数据都是存在表空间中,表空间包括如下:

系统表空间

系统表空间包含InnoDB数据字典(InnoDB关系对象的元数据),并且它是doublewrite buffer, change buffer, 和 undo logs存储区域。系统表空间也包含表和索引数据给用户在系统表空间创建的表。系统表空间能有一个或多个数据文件,默认只有一个系统表空间文件ibdata1 在data目录下。系统表空间的大小和数量可以在innodb data file path 启动项配置。我们可以改变默认的配置:

[mysqld]
innodb_data_home_dir = /path/to/myibdata/
innodb_data_file_path=ibdata1:50M;ibdata2:50M:autoextend

innodb_data_home_dir 是指定系统表空间文件的位置,innodb_data_file_path制定了系统表空间两个文件,一个名为为ibdata1的固定大小为50m的文件,另一个名为ibdata2的自动扩展大小为50m的文件。

独立表空间

只使用系统表空间,要仔细的计算好数据的增长,并且磁盘空间只能用于MySQL。独立表空间提供了一个更为灵活的选择,每个张InnoDB 引擎表具有自己的独立的表空间(.ibd file). 这个特性可以通过 innodb file per table 配置,默认是开启的。

独立表空间的优势:

  1. 能够获得磁盘空间,当你truncate 或者 dropp 一张具有独立表空间的表。
  2. 执行truncate 操作时更快
  3. 可以存储指定的一些表在不同的存储设备,在I/O操作,空间管理,备份中可以提升效率。
  4. 你能执行optimize table 操作压缩或者重建独立表空间,当你执行optimize table 时,innodb 会创建一个新的 .ibd文件并且分配一个临时的名字,使用实际数据大小的空间,当optimize 操作结束时,innodb 移除老的.ibd文件并且用新的替换。执行optimize 可以释放没有使用的空间。
  5. 可以迁移单张innodb 表,不至于整个数据库。
  6. 监控表的大小在文件系统水平,而不通过mysql

独立表空间的劣势:

  1. 会带来没有使用的空间,造成空间的浪费。
  2. fsync (将内存更新的数据同步在储存设备中,开销较大) 时,需要为每一个独立表空间都执行。需要InnoDB 执行多数的fsync 操作。
  3. 更多的描述文件。
通用表空间

和系统表空间相似,是一个共享的InnoDB 表空间 。可以通过create tablespace 来创建通用表空间

CREATE TABLESPACE tablespace_name
    ADD DATAFILE 'file_name'
    [FILE_BLOCK_SIZE = value]
        [ENGINE [=] engine_name]
        
mysql> CREATE TABLESPACE `ts1` ADD DATAFILE 'ts1.ibd' Engine=InnoDB;

创建表,并指定通用表空间(默认为独立表空间)

mysql> CREATE TABLE t1 (c1 INT PRIMARY KEY) TABLESPACE ts1;

通用表空间的优势:

  1. 可以为多张表储存数据
  2. 相对于独立表空间,更加的节省空间
  3. 可以指定通用表空间的位置,相对于独立表空间,每张表都有表空间文件,更加的方便于管理。
  4. 支持alter table 移动表在通用表空间和独立表空间,或通用表空间和系统表空间。

通用表空间的优劣势:

  1. 一个已经分配好表空间的表不能更改为通用表空间。
  2. 不能创建临时的通用表空间
  3. 通用表空间不支持临时表
  4. 在使用truncate 或者 dropp 时,释放的空间只能用于新的InnoDB数据。
临时表空间

临时表的数据从系统表空间中抽离出来,形成独立的表空间,并且把临时表的相关检索信息保存在系统信息表的information_schema 库下的innodb_temp_table_info表中。但是目前还不能定义临时表空间文件的位置,只能与innodb_data_home_dir一致。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值