14.16.7 InnoDB INFORMATION_SCHEMA 临时 table 信息 table

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

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

有关 table 的定义,请参见第 24.32.26 节,“ INFORMATION_SCHEMA INNODB_TEMP_TABLE_INFOtable”

例 14.12 INNODB_TEMP_TABLE_INFO

本示例演示了INNODB_TEMP_TABLE_INFOtable 的 Feature。

  • 创建一个简单的InnoDB临时 table:
mysql> CREATE TEMPORARY TABLE t1 (c1 INT PRIMARY KEY) ENGINE=INNODB;
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是临时 table 的唯一标识符。 NAME列显示临时 table 的系统生成名称,该名称以“ #sql”为前缀。列数(N_COLS)是 4 而不是 1,因为InnoDB总是创建三个隐藏 table 列(DB_ROW_IDDB_TRX_IDDB_ROLL_PTR)。 PER_TABLE_TABLESPACEIS_COMPRESSED报告TRUE用于压缩的临时 table。否则,这些字段报告FALSE

  • 创建一个压缩的临时 table。
mysql> CREATE TEMPORARY TABLE t2 (c1 INT) ROW_FORMAT=COMPRESSED ENGINE=INNODB;
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报告了压缩的临时 tableTRUE。压缩临时 table 的SPACE ID 是不同的,因为压缩临时 table 是在单独的每 table 文件 table 空间中创建的。在共享临时 table 空间(ibtmp1)中创建非压缩临时 table,并报告相同的SPACE ID。

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

返回空集,因为关闭服务器时INNODB_TEMP_TABLE_INFO及其数据不会持久保存到磁盘。

  • 创建一个新的临时 table。
mysql> CREATE TEMPORARY TABLE t1 (c1 INT PRIMARY KEY) ENGINE=INNODB;
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

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