Documentation Home
MySQL 8.0 参考手册  / 第 15 章 InnoDB 存储引擎  / 15.15 InnoDB INFORMATION_SCHEMA 表  /  14.16.7 InnoDB INFORMATION_SCHEMA临时表信息表

14.16.7 InnoDB INFORMATION_SCHEMA临时表信息表

INNODB_TEMP_TABLE_INFO提供有关实例InnoDB中活动的用户创建的临时表的信息。InnoDB它不提供有关 InnoDB优化器使用的内部临时表的信息。

mysql> SHOW TABLES FROM INFORMATION_SCHEMA LIKE 'INNODB_TEMP%';
+---------------------------------------------+
| Tables_in_INFORMATION_SCHEMA (INNODB_TEMP%) |
+---------------------------------------------+
| INNODB_TEMP_TABLE_INFO                      |
+---------------------------------------------+

有关表定义,请参阅 第 24.4.27 节,“INFORMATION_SCHEMA INNODB_TEMP_TABLE_INFO 表”

例 14.12 INNODB_TEMP_TABLE_INFO

此示例演示 INNODB_TEMP_TABLE_INFO表的特征。

  1. 创建一个简单的InnoDB临时表:

    mysql> CREATE TEMPORARY TABLE t1 (c1 INT PRIMARY KEY) ENGINE=INNODB;
  2. 查询INNODB_TEMP_TABLE_INFO以查看临时表元数据。

    mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_TEMP_TABLE_INFO\G
    *************************** 1. row ***************************
                TABLE_ID: 194
                    NAME: #sql7a79_1_0
                  N_COLS: 4
                   SPACE: 182
    PER_TABLE_TABLESPACE: FALSE
           IS_COMPRESSED: FALSE

    TABLE_ID 是临时表的唯一标识符 。该NAME列显示系统为临时表生成的名称,该名称以#sql为前缀。列数 ( N_COLS) 是 4 而不是 1,因为InnoDB总是创建三个隐藏表列(DB_ROW_IDDB_TRX_IDDB_ROLL_PTR)。 PER_TABLE_TABLESPACEIS_COMPRESSED报告 TRUE压缩的临时表。否则,这些字段报告FALSE

  3. 创建一个压缩的临时表。

    mysql> CREATE TEMPORARY TABLE t2 (c1 INT) ROW_FORMAT=COMPRESSED ENGINE=INNODB;
  4. 再查询INNODB_TEMP_TABLE_INFO

    mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_TEMP_TABLE_INFO\G
    *************************** 1. row ***************************
                TABLE_ID: 195
                    NAME: #sql7a79_1_1
                  N_COLS: 4
                   SPACE: 183
    PER_TABLE_TABLESPACE: TRUE
           IS_COMPRESSED: TRUE
    *************************** 2. row ***************************
                TABLE_ID: 194
                    NAME: #sql7a79_1_0
                  N_COLS: 4
                   SPACE: 182
    PER_TABLE_TABLESPACE: FALSE
           IS_COMPRESSED: FALSE

    PER_TABLE_TABLESPACEIS_COMPRESSED报告 TRUE压缩的临时表。压缩临时表的SPACEID 不同,因为压缩临时表是在单独的 file-per-table 表空间中创建的。非压缩临时表在共享临时表空间 ( ibtmp1) 中创建并报告相同的SPACEID。

  5. 重启 MySQL 并查询 INNODB_TEMP_TABLE_INFO

    mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_TEMP_TABLE_INFO\G
    Empty set (0.00 sec)

    返回一个空集,因为 INNODB_TEMP_TABLE_INFO它的数据在服务器关闭时不会持久保存到磁盘。

  6. 创建一个新的临时表。

    mysql> CREATE TEMPORARY TABLE t1 (c1 INT PRIMARY KEY) ENGINE=INNODB;
  7. 查询INNODB_TEMP_TABLE_INFO以查看临时表元数据。

    mysql> SELECT * FROM INFORMATION_SCHEMA.INNODB_TEMP_TABLE_INFO\G
    *************************** 1. row ***************************
                TABLE_ID: 196
                    NAME: #sql7b0e_1_0
                  N_COLS: 4
                   SPACE: 184
    PER_TABLE_TABLESPACE: FALSE
           IS_COMPRESSED: FALSE

    SPACEID 可能不同,因为它是在服务器启动时动态生成的 。