DB2資料庫物化檢視:MQT物化查詢表的使用

CloudSpace發表於2008-08-20
使用 MQT物化查詢表(Materialized Query Tables, MQT)

MQT 的定義基於查詢的結果。MQT 可以顯著提高查詢的效能。本教程將介紹 MQT、總結表(summary table)和 staging 表,並通過一些實用的例子展示如何建立和使用物化查詢表。

MQT 是基於查詢的結果定義的一個表。MQT 中包含的資料來自 MQT 定義所基於的一個或多個表。總結表(也稱自動總結表[AST])對於 IBM DB2 for Linux, UNIX, and Windows 的使用者來說應該感到比較熟悉,它們可以看作是特殊的 MQT。fullselect 是總結表定義的一部分,它包含一個 GROUP BY 子句,該子句總結 fullselect 中所引用表中的資料。

您可以將 MQT 看作一種物化的檢視。檢視和 MQT 都是基於一個查詢來定義的。每當檢視被引用時,檢視所基於的查詢便會執行。但是,MQT 實際上會將查詢結果儲存為資料,您可以使用 MQT 中的這些資料,而不是使用底層表中的資料。MQT 可以顯著提高查詢的效能,尤其是提高複雜查詢的效能。如果優化器確定查詢或查詢的一部分可以用一個 MQT 來解決,那麼查詢就可以被重寫以便利用 MQT。MQT 可以在建立表時定義,可以定義為由系統維護,也可以定義為由使用者維護。

這種 MQT 中的資料是由系統維護的。當建立這種型別的 MQT 時,可以指定表資料是 REFRESH IMMEDIATE 還是 REFRESH DEFERRED。通過 REFRESH 關鍵字可以指定如何維護資料。DEFERRED 的意思是,表中的資料可以在任何時候通過 REFRESH TABLE 語句來重新整理。系統維護的 MQT,不管是 REFRESH DEFERRED 型別的還是 REFRESH IMMEDIATE 型別的,對它們的插入、更新或刪除操作都是不允許的。但是,對於 REFRESH IMMEDIATE 型別的系統維護的 MQT,可以通過 對底層表的更改(即插入、更新或刪除操作)來更新。

下面的小節將展示一個建立 REFRESH IMMEDIATE 型別的系統維護的 MQT 的例子。這個表名為 EMP,它基於 SAMPLE 資料庫中的底層表 EMPLOYEE 和 DEPARTMENT。由於 REFRESH IMMEDIATE MQT 要求來自查詢內引用的每個表至少有一個惟一鍵要出現在 select 列表中,所以我們首先在 EMPLOYEE 表的 EMPNO 列上定義一個惟一性約束,另外還要在 DEPARTMENT 表的 DEPTNO 列上定義一個惟一性約束。DATA INITIALLY DEFERRED 子句的意思是,在執行 CREATE TABLE 語句的時候,並不將資料插入到表中。MQT 被建立好之後,就會處於檢查暫掛(check pending)狀態,在對它執行 SET INTEGRITY 語句之前,不能查詢它。IMMEDIATE CHECKED 子句指定,必須根據用於定義該 MQT 的查詢對資料進行檢查,並重新整理資料。NOT INCREMENTAL 子句指定對整個表進行完整性檢查。

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

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/14789789/viewspace-430118/,如需轉載,請註明出處,否則將追究法律責任。

相關文章