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;
- 查询INNODB_TEMP_TABLE_INFO以查看临时 table 元数据。
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_ID
,DB_TRX_ID
和DB_ROLL_PTR
)。 PER_TABLE_TABLESPACE
和IS_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_TABLESPACE
和IS_COMPRESSED
报告了压缩的临时 tableTRUE
。压缩临时 table 的SPACE
ID 是不同的,因为压缩临时 table 是在单独的每 table 文件 table 空间中创建的。在共享临时 table 空间(ibtmp1
)中创建非压缩临时 table,并报告相同的SPACE
ID。
- 重新启动 MySQL 并查询INNODB_TEMP_TABLE_INFO。
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;
- 查询INNODB_TEMP_TABLE_INFO以查看临时 table 元数据。
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 可能有所不同,因为它是在服务器启动时动态生成的。