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

善用 DB2 物化查詢表 (MQT) 加速複雜查詢:建立、維護與查詢重寫機制詳解

     編輯:DB2 教學

MQT 核心概念

MQT (Materialized Query Tables) 定義基於查詢結果。MQT 可顯著提升查詢效能,尤其複雜查詢。本文介紹 MQT、摘要表與 Staging 表,並透過實用範例展示建立與使用。

  • MQT 可視為物化視圖: 視圖與 MQT 皆基於查詢定義。視圖每被引用即執行查詢;MQT 實際儲存查詢結果資料,可直接使用 MQT 資料而非底層表。
  • 優化器重寫: 若優化器判定查詢或片段可用 MQT 解決,會重寫查詢利用 MQT。
  • 維護模式: 建表時可定義為系統維護 (REFRESH IMMEDIATE/DEFERRED) 或使用者維護。
     • REFRESH DEFERRED:隨時用 REFRESH TABLE 刷新。
     • 系統維護 MQT (無論 IMMEDIATE/DEFERRED) 禁止直接 INSERT/UPDATE/DELETE。
     • REFRESH IMMEDIATE 系統維護 MQT 可透過底層表異動 (INSERT/UPDATE/DELETE) 自動更新。

範例:建立 REFRESH IMMEDIATE 系統維護 MQT

基於 SAMPLE 資料庫 EMPLOYEE、DEPARTMENT 建立 EMP 表。因 REFRESH IMMEDIATE MQT 要求查詢引用的每個表至少有一唯一鍵出現在 SELECT 清單,先於 EMPNO、DEPTNO 建立唯一約束。

CONNECT TO SAMPLE
ALTER TABLE EMPLOYEE ADD UNIQUE (EMPNO)
ALTER TABLE DEPARTMENT ADD UNIQUE (DEPTNO)
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 表示建表時不載入資料,處於「檢查待定」狀態,執行 SET INTEGRITY 前不可查詢。IMMEDIATE CHECKED 指定依定義查詢檢查並刷新資料。NOT INCREMENTAL 指定對整表進行完整性檢查。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved