| 類型 | 生命週期 | MySQL 對應 |
|---|---|---|
| 全域臨時表 | 實例啟動~關閉 | MEMORY 引擎表 |
| 會話級臨時表 | 登入~登出 | `CREATE TEMPORARY TABLE` |
| 事務級臨時表 | 事務開始~提交/回滾 | 無原生支援 (用會話級模擬) |
| 查詢級臨時表 | SQL 執行期間 | 內部臨時表 (派生表、UNION、ORDER BY 等) |
-- Linux 符號鏈接
ln -s /run/shm/ /var/lib/mysql/tmp_space2
-- my.cnf
[mysqld]
innodb_temp_data_file_path=tmp_space2/ibtmp2:200M:autoextend
-- 重啟驗證
SELECT @@innodb_temp_data_file_path;
-- 結果: tmp_space2/ibtmp2:200M:autoextend
-- 建立預存程序建立 10 個臨時表
DELIMITER $$
CREATE PROCEDURE sp_create_temp_tables(IN cnt INT)
BEGIN
DECLARE i INT DEFAULT 1;
WHILE i <= cnt DO
SET @sql = CONCAT('CREATE TEMPORARY TABLE tmp', i, ' (id INT, desc VARCHAR(60))');
PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt;
SET i = i + 1;
END WHILE;
END $$
DELIMITER ;
CALL sp_create_temp_tables(10);
-- 查詢臨時表資訊
SELECT * FROM information_schema.innodb_temp_table_info;
-- 結果: 10 列,NAME 為 #sql{thread_id}_{seq}、SPACE 指向臨時表空間
MySQL 5.7 將臨時表空間從 `ibdata1` 剝離並暴露元資料,是穩定性與可觀測性的重要里程碑,配合 tmpfs 可大幅提升高併發複雜查詢吞吐。