物化查詢表 (Materialized Query Table, MQT) 以查詢結果定義表結構並實際儲存數據,可大幅提升複雜查詢效能。本文介紹 MQT、摘要表與暫存表概念,並透過實例示範建立與使用系統維護的即時刷新 MQT。
GROUP BY 彙總查詢。| 類型 | 刷新方式 | 可否直接 DML |
|---|---|---|
| REFRESH IMMEDIATE | 底層表異動(INSERT/UPDATE/DELETE)時自動同步 | 不可直接 DML |
| REFRESH DEFERRED | 手動執行 REFRESH TABLE 刷新 | 不可直接 DML |
基於 SAMPLE 資料庫的 EMPLOYEE 與 DEPARTMENT 表建立 EMP 表:
CONNECT TO SAMPLE;
-- 前置:被引用表需有唯一鍵出現在 SELECT 清單
ALTER TABLE EMPLOYEE ADD UNIQUE (EMPNO);
ALTER TABLE DEPARTMENT ADD UNIQUE (DEPTNO);
-- 建立 MQT:延遲初始資料、即時刷新
CREATE TABLE EMP AS (
SELECT E.EMPNO, E.FIRSTNME, E.LASTNAME, E.PHONENO,
D.DEPTNO, SUBSTR(D.DEPTNAME, 1, 12) AS DEPARTMENT, D.MGRNO
FROM EMPLOYEE E, DEPARTMENT D
WHERE E.WORKDEPT = D.DEPTNO
)
DATA INITIALLY DEFERRED
REFRESH IMMEDIATE;
-- 完成完整性檢查並載入初始資料
SET INTEGRITY FOR EMP IMMEDIATE CHECKED NOT INCREMENTAL;
關鍵子句說明:
DATA INITIALLY DEFERRED:建表時不載入資料,進入「檢查暫掛」狀態REFRESH IMMEDIATE:系統自動同步底層表變更SET INTEGRITY ... IMMEDIATE CHECKED NOT INCREMENTAL:全表完整性檢查並載入初始資料REFRESH TABLE 增量/全量刷新策略SYSCAT.TABLES 中 REFRESH、CHECK_PENDING 狀態SET INTEGRITY OFF)載入完再重建