當需對超大表 (億級行) 反覆查詢小數據子集 (如近 7 天活躍用戶) 時,將子集提取至臨時表,後續查詢僅掃描臨時表,**避免重複全表掃描、索引深度遍歷、鎖競爭**。
CREATE TEMPORARY TABLE tmp_active_users (
user_id BIGINT PRIMARY KEY,
last_login DATETIME,
login_count INT
) ENGINE=InnoDB; -- 顯式指定引擎,支持事務/外鍵
DROP,釋放空間CREATE TEMPORARY TABLE tmp_lookup (
code CHAR(10) PRIMARY KEY,
name VARCHAR(50)
) ENGINE=MEMORY; -- 或 ENGINE=HEAP (別名)
Table already exists)-- 顯式刪除 (推薦及時釋放)
DROP TEMPORARY TABLE IF EXISTS tmp_active_users;
-- 會話結束自動刪除 (正常斷開/異常斷開/KILL 線程)
-- 事務提交/回滾**不影響**臨時表生命周期
| 場景 | 推薦類型 | 理由 |
|---|---|---|
| 子集數據 < 100 萬行、頻繁 JOIN/查找、無大字段 | MEMORY | 內存速度優勢最大化,無持久化需求 |
| 子集含 BLOB/TEXT、超內存限制、需事務一致性 | InnoDB (磁盤) | 功能完整性優先,磁盤 I/O 可接受 |
| 一次性報表、ETL 中間結果、無並發寫入 | MyISAM (磁盤) | 全表鎖無影響,壓縮存儲節省空間 |
CREATE INDEX idx_col ON tmp_tbl(col);,後續查詢受益Created_tmp_disk_tables / Created_tmp_tables > 10% 內存不足或含大字段,調大 tmp_table_size/max_heap_table_size 或改磁盤表CREATE TEMPORARY TABLE tmp AS SELECT * FROM big_table WHERE condition; 一鍵建表導數據-- 1. 提取近 7 天訂單子集 (約 50 萬行)
CREATE TEMPORARY TABLE tmp_recent_orders ENGINE=InnoDB AS
SELECT order_id, user_id, amount, create_time
FROM orders
WHERE create_time >= DATE_SUB(NOW(), INTERVAL 7 DAY);
-- 2. 建立關鍵索引
CREATE INDEX idx_user_time ON tmp_recent_orders (user_id, create_time);
-- 3. 多維分析查詢 (秒級響應)
SELECT user_id, COUNT(*), SUM(amount)
FROM tmp_recent_orders
GROUP BY user_id
HAVING SUM(amount) > 1000;
-- 4. 會話結束自動清理,無需手動 DROP