首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 暫存表使用教學:建立、類型選擇與效能考量

     編輯:MySQL 資料庫相關知識

當處理大量資料且需重複查詢特定子集時,使用暫存表可避免重複掃描大表,顯著提升查詢效能。本文說明暫存表的建立語法、生命週期、HEAP 記憶體表優缺點與使用建議。

建立暫存表語法

在標準 CREATE TABLE 加入 TEMPORARY 關鍵字:

CREATE TEMPORARY TABLE tmp_table (
    name VARCHAR(10) NOT NULL,
    value INT NOT NULL
);

生命週期與可見性

  • 存在期間: 僅在目前資料庫連線 (Session) 期間存在。
  • 自動清理: 連線斷開時,MySQL 自動刪除暫存表並釋放空間。
  • 手動刪除: 連線期間亦可執行 DROP TABLE tmp_table 主動釋放資源。
  • 名稱遮蔽: 若同名永久表存在,暫存表會遮蔽該永久表(連線期間內無法存取永久表)。

HEAP (MEMORY) 型暫存表

指定儲存引擎為 HEAP,資料將儲存在記憶體中:

CREATE TEMPORARY TABLE tmp_table (
    name VARCHAR(10) NOT NULL,
    value INT NOT NULL
) ENGINE = HEAP;  -- 或 TYPE = HEAP (舊版語法)

優點

  • 讀寫速度極快,適合高頻暫時運算。
  • 無磁碟 I/O 瓶頸。

限制與注意事項

  • 不支援 BLOB/TEXT 欄位。
  • 不支援 AUTO_INCREMENT(舊版本)。
  • 資料量受限於 max_heap_table_size 系統變數。
  • 伺服器重啟資料全失(但暫存表連線斷開即刪除,影響較小)。
  • 索引預設為 Hash 索引,範圍查詢 (>, <, BETWEEN) 效能不如 B-Tree。

效能測試建議

暫存表不一定比直接查詢大表快,特別是當大表已有良好索引時。建議實際測試:

  1. 測試直接查詢大表耗時。
  2. 測試建立暫存表 + 查詢暫存表總耗時。
  3. 比較兩者差異,評估是否值得引入暫存表。

適用情境

  • 複雜報表查詢,需多次 JOIN 同一子集資料。
  • ETL 流程中間暫存轉換結果。
  • 避免重複計算昂貴的子查詢結果。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved