首页 > 其他分享 >InnoDB建表与表空间

InnoDB建表与表空间

时间:2023-03-11 13:57:08浏览次数:39  
标签:文件 存储 建表 索引 InnoDB 空间 共享

InnoDB建表与表空间

前言:数据在数据库中以磁盘内存两种方式存在,内存中的数据是为了提升读写的速度,最终所有数据都会刷到磁盘中,而数据库是如何对表的空间进行管理的呢?本篇文章中会有所解释。

1. InnoDB建表与表空间

建表代码:CREATE TABLE t(id int(11))Engine = INNODB;

InnoDB会在C盘的data目录下创建以下两个文件

  • frm文件较小
  • 在5.7版本后会为每个表生成一个ibd文件,称为独立表空间,在此之前,所有表的数据和索引会存储在“系统表空间“(共享表空间)中,注:系统表空间为所有表共享一个物理表空间文件

也可以通过一下设置来控制是否为每个表创建独立的ibd文件

--开启【每个表都创建表空间文件】

SET @@global.innodb_file_per_table = ON;

--查看【每个表都创建表空间文件】状态

SHOW VARIABLES LIKE 'innodb_file_per+table';

1.1 表空间概述

首先我们需要了解一下什么是表空间,表空间是数据库中用于存储数据和索引的物理文件集合,用于将数据和索引组织在一起,方便管理和维护。表空间可以帮助数据库管理员对数据进行分组管理,也可以用于分配不同的存储设备或文件系统,以优化数据库的性能。

在InnoDB引擎中,表空间是由MySQL数据库管理系统创建的。当使用InnoDB引擎建立表时,MySQL会为该表创建一个默认的表空间,并在该表空间中创建表。如果需要使用多个表空间,可以在建立表时通过指定表空间名称来实现。需要注意的是,创建表空间需要具备创建表空间的权限。

如果还是不太懂,那么更加简单一点,表空间是一个物理的概念,在数据库中,表空间是由一组文件组成的,这些文件通常存储在硬盘上。你可以将表空间想象成一块硬盘空间,它的作用是给Innodb引擎提供一个存储数据的场所。通常情况下,一个数据库中有多张表,每张表都会有对应的表空间,这样就可以将不同的表的数据存储在不同的空间中,保证数据的安全性和独立性。同时,表空间也可以帮助Innodb引擎对数据进行管理和优化,提升数据库的性能。

1.2 五类表空间

好的,接下来让我们分别了解一下五类表空间:

1.系统表空间(System Tablespace):系统表空间是共享表空间模式(下文会讲解)下的一个概念,它包含InnoDB的系统表和索引。这些表和索引的定义在InnoDB存储引擎源代码中,是InnoDB的一部分。

2.共享表空间(Shared Tablespace):共享表空间模式下的所有表都存储在同一个表空间中,也就是说所有的表共享同一个.ibd文件。这个文件包含了所有表的数据和索引。共享表空间是InnoDB存储引擎默认的表空间模式

3.独立表空间(Per-Table Tablespace):独立表空间模式下每个表都有一个对应的.ibd文件,这个文件包含了表的数据和索引。每个表的数据都被存储在独立的表空间中。

4.UNDO表空间(Undo Tablespace):InnoDB使用Undo表空间来存储事务的Undo日志,Undo日志用于回滚事务。InnoDB支持多个Undo表空间,每个Undo表空间包含多个Undo段。

5.Redo日志文件(Redo Log Files):InnoDB使用Redo日志来记录数据修改的信息,Redo日志文件用于恢复数据。Redo日志文件包含了所有数据文件的变化,因此对于所有的表空间都是必需的。

1.2.1 QA时间

Q:可以理解成innodb在创建表的时候会给表画一个具体的物理空间,用来存放表中的数据和索引吗

  • 答案是可以的,InnoDB引擎在创建表的时候,会给表分配一个具体的物理空间,用来存储表中的数据和索引。这个物理空间就是表空间。每个表都有自己的表空间,包含了表的数据文件、索引文件等。这些文件实际上就是表的数据和索引在硬盘上的存储形式。通过分配表空间来管理表的数据和索引,可以提高数据库的性能和可靠性。

Q:依照上一个问题,可以理解成共享表空间模式中不同的表间所存放的数据是在不同的表空间中,但是不同的表又共享一个文件,用来存放索引呢?

  • 答案是错误的,如果采用共享表空间模式,所有表的数据和索引都存储在同一个表空间中的共享文件中,而不是每个表都有单独的存储空间。这个共享文件通常称为 "ibdata" 文件,其中包含了 InnoDB 存储引擎的多个数据结构,包括数据页、索引页、Undo 日志和事务日志等。当 InnoDB 引擎需要访问某个表时,它会通过表的元数据信息查找表中的数据和索引所在的具体位置,然后在共享文件中进行读取和写入操作。因此,共享表空间结构中的表并不占用独立的物理空间,而是共享一个物理文件。

标签:文件,存储,建表,索引,InnoDB,空间,共享
From: https://www.cnblogs.com/LaChlanYang/p/17205786.html

相关文章

  • InnoDB引擎
    逻辑存储结构InnoDB的逻辑存储结构如下图所示:  1).表空间表空间是InnoDB存储引擎逻辑结构的最高层,如果用户启用了参数innodb_file_per_table(在8.0版本中默认开......
  • AP5160 LED 2.5-100V 7.5A 降压恒流驱动IC 效率高 省空间
    产品描述AP5160是一款效率高,稳定可靠的LED灯恒流驱动芯片,内置高精度比较器,固定关断时间控制电路,恒流驱动电路等,特别适合大功率LED恒流驱动。AP5160采用SOT23-6封装......
  • 2023.03.11.命名空间
    c++命名空间为了区分不同库中相同名称的函数、类、变量等命名空间的定义使用关键字namespace,后跟命名空间的名称,如下所示:namespacenamespace_name{//代码声明}为......
  • [第五空间 2021]yet_another_mysql_injection
    [第五空间2021]yet_another_mysql_injectionF12查看源代码发现?source提示,<?phpinclude_once("lib.php");functionalertMes($mes,$url){die("<script>alert('......
  • Mongodb存储二进制文件GridFS空间复用测试
    Oracle可以存储二进制文件,测试后发现lob字段再数据delete后表空间不能被复用,考虑将数据存储在mongodb中,mongodb存在GridFS,测试GridFS是否也存在相同的情况mongofiles命令介......
  • laravel migration创建表
    一,phpartisanmake:magrationcreate_test_table命令行字段如何设置 二,phpartisanmigrate命令行如果出现错误就添加两行代码最后成功了 ......
  • 第1节 度量空间,n维欧式空间
    掌握距离的定义和n维欧式空间中的距离. 掌握邻域的定义和性质.掌握利用距离和邻域两种方式给出的收敛的定义,理解n维欧式空间中收敛的等价条件.掌握有界点集和区间的定......
  • Manim-空间与变换
    所有常量都可以在constants.py中找到屏幕空间屏幕中心为原点(0,0,0),遵循右手坐标系,向右为x轴正方向,向上为y轴正方向,向前为z轴负方向,旋转时正方向为顺时针方向。相关常量......
  • OracleDatabase——数据库表空间dmp导出与导入
    由于公司的程序一直部署在客户现场内网,内网调试难度高,一般是有备份还原数据库的需求,这里简记备份(导出)数据库dmp文件与恢复(导入)的步骤。一、导出dmp文件exp与expdp命令异......
  • MySQL用户新建表报1227异常
    1、MySQL8新建用户createuser'firestone'@'%'identifiedby'123456';2、给用户授予test库所有权限grantallprivilegesonfirestone_pretank.*to'firestone'@'%';3......