MySQL存储引擎【InnoDB详解 第一期】

MySQL存储引擎

存储引擎三大特征

  • 数据结构 :B树、Hash表

  • 存储介质 :磁盘、内存

  • 支持功能 :事务、锁、外键、缓存等

InnoDB存储引擎

存储底层

InnoDB存储引擎的数据组织形式为B+树,这颗B+树上的每个节点都对应一个”块“

磁盘中的数据默认以”块“为单位读取,MySQL默认块大小为16KB

当执行器直接从硬盘中读取数据时,每次以节点为单位读取一个块,进行大小判断,并产生一次磁盘IO

因此,树的深度将直接决定每次读取数据的性能,如红黑树作为二叉树来说,深度过深,这也是InnoDB选择B+树作为数据存储结构的原因。

B+树的缺点

由于B+树中每个节点可以存储多个实体(主键或者全部数据),因此对表的增删操作将会导致节点变满/空

默认负载因子50%时进行操作,当节点过”空“时,即存储数据很少,将会进行自底向上的节点合并操作。当节点过”满“时,也会进行自底向上的拆分操作。因此调整节点会对B+树性能带来一定影响。


存储结构

InnoDB存储结构主要分为内存区磁盘区

内存区

内存区中Log Buffer与日志相关,Buffer Pool则主要为了减少IO次数

在内存与磁盘同步时,用户可以选择直接同步到磁盘,或者logBuffer写入Page Cache,然后由mysql自己写入磁盘

磁盘文件

MySQL的底层通过为每个数据库生成一个位于/var/lib/mysql下的文件夹,这里我的数据库名为blog。

该参数也可通过@@datadir查看,注意该变量是只读变量,只有安装时才能设置

进入blog文件夹可发现,MySQL为每张表都创建了一个ibd文件来存储表的信息。因此,默认情况下,创建一张表,就等于创建了一个ibd文件

在这里插入图片描述

表空间

一个ibd文件就对应一个表空间,表空间用于存储innodb下的表信息

使用 select @@innodb_file_per_table 来查看默认值,默认为1。

若关闭该设置,则不创建.ibd, 而是放在系统表空间下 ,即/var/lib/mysql/ibdata1

若要查看每张表的表信息,则可以到information_schema数据库下的innodb_tables表查看。

select * from information_schema.innodb_tables where name = "blog/ms_article"

在这里插入图片描述

共享/独立表空间
  • 表空间分为共享表空间,独立表空间

  • 前者包含General、System类型(ibdata1),后者则是默认类型。

    • 系统表空间还可存储Change Buffer
  • 共享表空间一个文件可以存储多个表数据,独立表空间一个文件只能存储一个表数据

  • 创建方法:

    create TABLESPACE ts (add datafile ”name“ 可选) Engine=InnoDB 
    
      默认情况下会生成128位的uuid作为ibd文件名,也可以通过add datafile ”name“ 来指定
    
  • 使用

    create table t (c int primary key) tablespace ts
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值