DB2數據庫物化視圖:MQT物化查詢表的使用

使用 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

用 SQL 查詢 DB2 XML 數據(1)
  DB2® Viper 正處于 beta 階段,它爲存儲、治理和查詢 XML 數據提供了新的支持。在本文中,您將學習如何使用 SQL 和 SQL/XML 查詢存儲在 XML 列中的數據。後續的文章將闡述如何使用 DB2 支持的一種新語言 XQu...查看完整版>>用 SQL 查詢 DB2 XML 數據(1)
 
使用DB2數據庫臨時表的注意事項
  在使用DB2的臨時表時, 以下幾點需要注重:   1. DB2的臨時表需要用命令Declare Temporary Table來創建, 並且需要創建在用戶臨時表空間上;  2. DB2在數據庫創建時, 缺省並不創建用戶臨時表空間, 假如需要...查看完整版>>使用DB2數據庫臨時表的注意事項
 
Oracle數據庫中物化視圖的原理剖析
物化視圖 (MV)在一個段中存儲查詢結果,並且能夠在提交查詢時將結果返回給用戶,從而不再需要重新執行查詢 — 在查詢要執行幾次時(這在數據倉庫環境中非經常見),這是一個很大的好處。物化視圖可以利用一個快速刷新...查看完整版>>Oracle數據庫中物化視圖的原理剖析
 
解決物化視圖刷新過程中的約束沖突問題
本文中,我們通過實例的方法來幫助您理解物化視圖刷新過程中出現的約束沖突問題。 即使將物化視圖的約束建立和基表完全一致,由于物化視圖的刷新機制,也會産生約束沖突的現象。 以下是一個簡單的示例: SQL> CRE...查看完整版>>解決物化視圖刷新過程中的約束沖突問題
 
Oracle筆記-物化視圖
  第 13 章 物化視圖  8.1.5企業版/個人版開始支持  需要權限:GRANT CREATE MATERIALIZED VIEW,還必須直接賦予GRANT QUERY REWRITE.爲實現查詢重寫,必須使用CBO.  13.1 物化視圖如何工作  設置  COMP...查看完整版>>Oracle筆記-物化視圖
 
解決物化視圖刷新過程中的約束沖突問題
本文中,我們通過實例的方法來幫助您理解物化視圖刷新過程中出現的約束沖突問題。 即使將物化視圖的約束建立和基表完全一致,由于物化視圖的刷新機制,也會産生約束沖突的現象。 以下是一個簡單的示例: SQL> CRE...查看完整版>>解決物化視圖刷新過程中的約束沖突問題
 
Oracle中管理物化視圖變得更加容易
利用強制查詢重寫和新的強大的調整顧問程序 — 它們使您不再需要憑猜測進行工作 ,在 10g 中治理物化視圖變得更加輕易。 物化視圖 (MV) — 也稱爲快照,已經廣泛使用。MV 在一個段中存儲查詢結果,並且能夠在提交查詢...查看完整版>>Oracle中管理物化視圖變得更加容易
 
Oracle 10G 最佳20位新特性:物化視圖
  利用強制查詢重寫和新的強大的調整顧問程序 — 它們使您不再需要憑猜測進行工作 — 的引入,在 10g 中治理物化視圖變得更加輕易    ...查看完整版>>Oracle 10G 最佳20位新特性:物化視圖
 
Oracle 10g 中管理物化視圖變得更加容易
  利用強制查詢重寫和新的強大的調整顧問程序 — 它們使您不再需要憑猜測進行工作 — 的引入,在 10g 中治理物化視圖變得更加輕易    ...查看完整版>>Oracle 10g 中管理物化視圖變得更加容易
 
 
回到王朝網路首頁