DB2 的 CREATE TABLE ... AS (SELECT ...) 語法家族功能強大,不僅能一次完成「查詢 + 建表」動作,更支援唯讀定義表、物化查詢表 (MQT) 及純結構複製三大進階模式。本文以實戰範例逐一解析,助您靈活運用。
將查詢結果直接持久化為實體表,包含資料與結構:
CREATE TABLE new_table_name AS
(SELECT * FROM source_table)
WITH DATA;
CREATE TABLE ... LIKE ...。適用場景:臨時分析表、資料備份、ETL 中繼站。
MQT 是預先計算並儲存查詢結果的特殊表,查詢優化器可自動重導查詢至 MQT,大幅加速彙總報表:
CREATE TABLE sales_summary AS
(SELECT region, SUM(amount) AS total_sales
FROM sales_fact
GROUP BY region)
DATA INITIALLY DEFERRED REFRESH DEFERRED;
關鍵字解析:
REFRESH TABLE sales_summary),適合資料變動頻率低、查詢頻率高的彙總表。REFRESH IMMEDIATE,資料異動即時同步,但會增加寫入負擔。注意:MQT 在系統目錄中 TYPE 顯示為 'S' (Summary Table),但可像一般表被 SELECT、JOIN、建立索引。
最輕量的結構複製方式,不涉及 SELECT 查詢計畫:
CREATE TABLE new_table_name LIKE source_table;
適用場景:建立暫存表、測試環境同步結構、分區表模板。
| 特性 | AS (SELECT) WITH DATA | AS (SELECT) DEFINITION ONLY | MQT (REFRESH DEFERRED) | LIKE |
|---|---|---|---|---|
| 包含資料 | 是 | 否 | 手動刷新後有 | 否 |
| 自動同步來源 | 否 | 否 | 否 (需 REFRESH) | 否 |
| 查詢優化器利用 | 否 | 否 | 是 (自動重導) | 否 |
| 可建立索引 | 是 | 是 | 是 | 是 |

DATA INITIALLY DEFERRED 再 REFRESH TABLE,避免長鎖定。RUNSTATS,確保優化器有最新統計資訊。LIKE,語意最清晰、效能最好。善用這三大語法,能讓 DB2 開發與維運更具彈性與效能。