資料表變數(DECLARE @t TABLE(...))儲存在記憶體中,不像暫存表(#temp)寫入 tempdb 磁碟。因此存取速度較快,以邏輯讀取取代實體 I/O,可顯著提升效能。
若大量使用資料表變數或單一變數承載大量資料,會消耗伺服器記憶體,導致緩衝區壓力、甚至觸發記憶體不足錯誤。必須評估資料量上限,必要時改用暫存表。
WITH (RECOMPILE) 或參數化查詢優化。| 情境 | 建議 |
|---|---|
| 資料量小(< 1 萬列)、單一程序、無複雜 JOIN | 資料表變數 ✅ |
| 資料量大、多表關聯、高併發 OLTP | 暫存表 + 索引 ✅ |
| 需跨程序/批次共用暫存資料 | 暫存表(全域 ##temp 或永久表)✅ |
| 動態 SQL、未知結構 | 暫存表較靈活 ✅ |
資料表變數在輕量級暫存資料場景具速度優勢,但非萬能藥。OLTP 核心交易路徑務必嚴謹評估資料量、併發度、鎖定行為,選擇最適資料結構,避免「為了快反而慢」的反效果。