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

DB2 MQT 匹配原理深度解析與高性能設計指南

     編輯:DB2 教學

簡介:MQT 加速 OLAP 查詢的核心機制

物化查詢表(MQT)預計算涉及一或多個表/別名的查詢結果。後續查詢通過全量或部分匹配 MQT,由 DB2 補償剩餘邏輯,大幅提升查詢性能。MQT 對應用完全透明,創建刪除無需修改代碼,類似索引機制。透明性由 SQL 編譯器的 MQT 匹配算法實現:重寫階段啟發式選擇最優匹配方案,優化階段計算成本選擇最終執行計劃。注意:MQT 非越多越好,會增加存儲佔用與編譯時間,需針對性創建。

六大可匹配查詢模式

基於「MQT 包含查詢所需所有行、列,冗余度一致或可補償」原理,以下六類查詢可利用 MQT:

  1. MQT 精確匹配查詢
  2. 查詢結果集是 MQT 子集
  3. 查詢連接表數多於 MQT
  4. 查詢連接表是 MQT 子集(需滿足引用完整性 RI)
  5. 查詢包含 MQT 缺失列(需滿足函數依賴)
  6. 查詢聚集級別高於 MQT

實驗環境構建

維表 Product(PROD_ID 唯一鍵)、Customer(CUST_ID 唯一鍵),事實表 Sales(外鍵關聯兩維表,保證 RI)。Product 定義函數依賴:CAT_ID → CAT_DESC、CAT_ID → GROUP_ID(NOT ENFORCED ENABLE QUERY OPTIMIZATION)。人為設置統計信息使編譯器傾向選擇 MQT 方案。

CREATE TABLE MQTSCH.PRODUCT(PROD_ID INT NOT NULL UNIQUE,
  PROD_DESC VARCHAR(64), CAT_ID INT NOT NULL, CAT_DESC VARCHAR(64),
  GROUP_ID INT NOT NULL, GROUP_DESC VARCHAR(64),
  CONSTRAINT FD1 CHECK (CAT_DESC DETERMINED BY CAT_ID) NOT ENFORCED ENABLE QUERY OPTIMIZATION,
  CONSTRAINT FD2 CHECK (GROUP_ID DETERMINED BY CAT_ID) NOT ENFORCED ENABLE QUERY OPTIMIZATION);

CREATE TABLE MQTSCH.CUSTOMER(CUST_ID INT NOT NULL UNIQUE, CUST_NAME VARCHAR(50), CUST_ADDRESS VARCHAR(100));
CREATE TABLE MQTSCH.SALES(PROD_ID INT NOT NULL REFERENCES MQTSCH.PRODUCT(PROD_ID),
  CUST_ID INT NOT NULL REFERENCES MQTSCH.CUSTOMER(CUST_ID),
  SALE_DATE DATE NOT NULL, AMOUNT DECIMAL(9,2) NOT NULL);
set current refresh age=any;

六大模式詳細演示

1. 精確匹配

MQT SALES_PROD 基於外鍵連接 Sales 與 Product,查詢相同 Join。執行計劃顯示 TBSCAN 直接訪問 MQT,診斷信息確認 MQT 被利用。

2. 查詢結果集為 MQT 子集

查詢在精確匹配基礎上增加謂詞 AMOUNT > 10000。TBSCAN 包含謂詞過濾,MQT 被重用,僅需額外計算剩餘條件。

3. 查詢連接表多於 MQT

MQT 連接 Sales+Product,查詢額外連接 Customer。前提:MQT 結果集為查詢對應連接結果的超集(MQT 無額外過濾謂詞)。執行計劃顯示 NLJOIN 將 MQT 與 Customer 重新連接。

4. 查詢連接表為 MQT 子集(需 RI)

MQT SALES_PROD_CUST 連接三表,查詢僅連接 Sales+Product。額外 Join 基於 RI(外鍵),不增減行數,編譯器利用此特性匹配 MQT。執行計劃直接 TBSCAN 訪問 MQT。

5. 查詢包含 MQT 缺失列(需函數依賴)

MQT SALES_BY_CAT 包含 CAT_ID、SUM(AMOUNT),查詢需 CAT_DESC。Product 定義 FD:CAT_ID → CAT_DESC。編譯器先判定 MQT 不合格(EXP0073W),收集 FD 後重寫查詢,通過 MQT 與 Product 重新連接(DISTINCT 去重)獲取 CAT_DESC,最終匹配成功(EXP0149W)。

6. 查詢聚集級別高於 MQT

MQT 粒度細於查詢時,可通過進一步聚合滿足查詢(本文未展開示例)。

設計建議

針對性創建 MQT 覆蓋高頻查詢模式;利用 RI 與函數依賴擴大匹配範圍;監控編譯時間避免過度創建;結合 EXPLAIN 診斷信息驗證匹配效果。

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