當處理大型資料表時,若需頻繁查詢少量子集資料,直接對完整大表操作效率極低。此時建立臨時表將所需記錄暫存,再對臨時表進行後續查詢,能顯著提升效能。臨時表僅存在於當前資料庫連線期間,連線斷開時 MySQL 會自動刪除並釋放空間,也可透過 DROP TABLE 主動釋放。
在 CREATE TABLE 陳述式前加上 TEMPORARY 關鍵字即可:
CREATE TEMPORARY TABLE tmp_table (
name VARCHAR(10) NOT NULL,
value INTEGER NOT NULL
);
指定 TYPE = HEAP(或 ENGINE = MEMORY)可將臨時表建立於記憶體中,查詢速度遠快於磁碟表:
CREATE TEMPORARY TABLE tmp_table (
name VARCHAR(10) NOT NULL,
value INTEGER NOT NULL
) ENGINE = MEMORY;
注意:HEAP/MEMORY 表有自身限制(如不支援 BLOB/TEXT、固定長度行),詳細請參閱 MySQL 官方手冊。
CREATE TEMPORARY TABLE tmp_table (...)CREATE TEMPORARY TABLE tmp_table SELECT * FROM table_name以上兩種方式建立的臨時表,皆在連線斷開時自動清除。若程式使用連線池(同一連線執行多條 SQL),臨時表資料不會自動清空,需自行管理。
臨時表未必總比直接查大表快。若大表索引設計良好,直接查詢可能更優。建議實測比對後再決定是否採用。
-- 建立並填入資料
CREATE TEMPORARY TABLE recent_orders ENGINE=MEMORY
SELECT order_id, customer_id, amount
FROM orders
WHERE order_date >= DATE_SUB(NOW(), INTERVAL 30 DAY);
-- 後續高頻查詢
SELECT customer_id, SUM(amount) AS total
FROM recent_orders
GROUP BY customer_id;
-- 用完即釋
DROP TEMPORARY TABLE recent_orders;