DB2 支持兩種「以查代建」模式:
REFRESH TABLE 增量/全量同步源數據變更。語法:CREATE TABLE <新表> AS (SELECT ...) DATA INITIALLY DEFERRED REFRESH DEFERRED
關鍵字說明:
DATA INITIALLY DEFERRED:創建時不填充數據(結構同步)。REFRESH DEFERRED:不自動同步源表變更,需手動 REFRESH TABLE。-- 1. 準備源表
CREATE TABLE T1 (ID INT, NAME VARCHAR(12), ADDRESS VARCHAR(50));
INSERT INTO T1 VALUES (1, 'wjz', 'sdfsfds'), (2, 'lw', 'v4');
-- 2. 基於查詢創建新表 T3(僅複製 ID, NAME)
CREATE TABLE T3 AS (SELECT ID, NAME FROM T1)
DATA INITIALLY DEFERRED REFRESH DEFERRED;
-- 3. 首次填充數據
REFRESH TABLE T3;
-- 結果:T3 含 2 行數據
-- 4. 源表新增數據
INSERT INTO T1 VALUES (3, 'wxb', 'csk');
-- 5. 同步刷新
REFRESH TABLE T3;
-- 結果:T3 自動新增第 3 行,實現數據同步
若需更強的同步能力(如 REFRESH IMMEDIATE 觸發器級實時同步、查詢重寫優化),需創建真正的 MQT:
CREATE TABLE T3_MQT AS (SELECT ID, NAME FROM T1)
DATA INITIALLY DEFERRED REFRESH IMMEDIATE
ENABLE QUERY OPTIMIZATION
MAINTAINED BY SYSTEM;
差異點:
REFRESH IMMEDIATE:源表提交事務時自動同步(需觸發器支持,有性能開銷)。ENABLE QUERY OPTIMIZATION:優化器可自動將查詢 T1 的 SQL 重寫為查詢 T3_MQT,大幅提升聚合/連接查詢速度。MAINTAINED BY SYSTEM:由數據庫維護數據一致性(對比 MAINTAINED BY USER 需手動維護)。| 操作 | 普通表 (REFRESH DEFERRED) | MQT (REFRESH IMMEDIATE) |
|---|---|---|
| 初始填充 | REFRESH TABLE | REFRESH TABLE |
| 後續同步 | 手動 REFRESH TABLE | 自動 (事務提交時) |
| 查詢重寫 | 不支持 | 支持 (需啟用) |
| 源表 DDL 變更 | 不影響 | 可能導致 MQT 失效 |
| 適用場景 | 報表快照、數據歸檔、測試數據構建 | 實時儀表盤、高頻聚合查詢加速 |
REFRESH DEFERRED 普通表,維護成本低。REFRESH IMMEDIATE MQT,並啟用 ENABLE QUERY OPTIMIZATION。DATA INITIALLY DEFERRED,再並行 REFRESH TABLE 或分區並行載入。