首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> DB2 資料庫 >> DB2 教學

DB2 SELECT 進階用法:結果表、物化查詢表(MQT)與結構複製三大實戰模式

     編輯:DB2 教學

模式一:創建結果表(僅結構,無數據)

CREATE TABLE new_table_name AS
(SELECT * FROM source_table) DEFINITION ONLY;

適用於:快速複製表結構用於測試、臨時表建立、DDL 模板生成。不複製索引、約束、觸發器、授權。

模式二:創建物化查詢表(MQT)

CREATE TABLE mqt_table AS
(SELECT col1, SUM(col2) AS total FROM fact_table GROUP BY col1)
DATA INITIALLY DEFERRED REFRESH DEFERRED;

REFRESH TABLE mqt_table;  -- 首次填充數據
  • DATA INITIALLY DEFERRED:創建時不執行查詢,避免長事務阻塞。
  • REFRESH DEFERRED:手動/排程刷新,適合數據倉庫彙總表、報表緩存。
  • MQT 在系統目錄中類型顯示為 Q(QUERY),但可像普通表一樣被查詢、建立索引、授權。
  • 優化器可自動重寫查詢命中 MQT(需 CURRENT REFRESH AGE = ANY)。

模式三:複製表結構(含約束、索引可選)

CREATE TABLE new_table LIKE source_table;

複製列定義、主鍵、唯一約束、檢查約束、默認值、NOT NULL。不複製:外鍵、觸發器、索引(除主鍵/唯一索引)、權限、統計信息。

對比速查表

語法複製內容典型場景備註
AS (SELECT...) DEFINITION ONLY列定義快速建測試表、DDL 模板無索引/約束
AS (SELECT...) DATA INITIALLY DEFERRED REFRESH DEFERRED列定義 + 查詢定義數據倉庫彙總、報表緩存需手動 REFRESH,優化器可自動路由
LIKE列定義 + 主鍵/唯一/檢查/默認分區表模板、歷史表歸檔最接近原表結構,無數據

最佳實踐提示

  • MQT 刷新策略:增量刷新(REFRESH TABLE ... INCREMENTAL)需定義暫存表與暫存表觸發器,適合高頻更新場景。
  • 結果表與 LIKE 表創建後,記得同步創建業務所需索引、授權、RUNSTATS。
  • 跨 Schema 複製時指定完整限定名:CREATE TABLE schema2.tbl LIKE schema1.tbl。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved