DB2物化視圖(Materialized Query Tables, MQT)


DB2的物化視圖MQT是基於查詢結果定義的一個表,MQT中包括的數據來自MQT定義所基於的一個或多個表, 使用MQT能夠顯著提高查詢的操作性能。

數據庫的視圖和MQT都是基於一個查詢來定義的。每當視圖被引用時,視圖所基於的查詢便會運行。

但MQT實際上會將查詢結果存儲為數據,您能夠使用MQT中的這些數據。而不是使用底層表中的數據。

MQT 能夠顯著提高查詢的性能,尤其是提高復雜查詢的性能。

假設優化器確定查詢或查詢的一部分能夠用一個 MQT 來解決,那么查詢就能夠被重寫以便利用 MQT。

MQT 能夠在創建表時定義。能夠定義為由系統維護,也能夠定義為由用戶維護。

DATA INITIALLY DEFERRED 子句的意思是。在運行 CREATE TABLE 語句的時候,並不將數據插入到表中。
MQT 被創建好之后,就會處於檢查暫掛(check pending)狀態,在對它運行 SET INTEGRITY 語句之前。不能查詢它。IMMEDIATE CHECKED 子句指定。必須依據用於定義該 MQT 的查詢對數據進行檢查,並刷新數據。

NOT INCREMENTAL 子句指定對整個表進行完整性檢查。

這樣的 MQT 中的數據是由系統維護的。

當創建這樣的類型的 MQT 時,能夠指定表數據是 REFRESH IMMEDIATE 還是 REFRESH DEFERRED。通過 REFRESH keyword能夠指定怎樣維護數據。DEFERRED 的意思是,表中的數據能夠在不論什么時候通過 REFRESH TABLE 語句來刷新。

系統維護的 MQT,無論是 REFRESH DEFERRED 類型的還是 REFRESH IMMEDIATE 類型的,對它們的插入、更新或刪除操作都是不同意的。可是。對於 REFRESH IMMEDIATE 類型的系統維護的 MQT,能夠通過 對底層表的更改(即插入、更新或刪除操作)來更新。

以下看一個樣例

首先創建原始表

CREATE TABLE T (
   ID                INTEGER  NOT NULL,
   COL1              VARCHAR(128),
   COL2              VARCHAR(128),
   COL3              VARCHAR(128),
   COL4              VARCHAR(128),
   COL5              VARCHAR(128),
   PRIMARY KEY (ID)
) ORGANIZE BY ROW;

創建MQT表

CREATE TABLE T_MQT ( ID, COL1, COL2, COL3 ) 
AS ( select ID, COL1, COL2, COL3  from T ) 
DATA INITIALLY DEFERRED REFRESH IMMEDIATE MAINTAINED BY SYSTEM;
SET INTEGRITY FOR T_MQT IMMEDIATE CHECKED FULL ACCESS;


寫入數據到原始表中

insert into T(ID, COL1, COL2, COL3, COL4, COL5) values (1, 'col1', 'col2', 'col3', 'col4', 'col5');
insert into T(ID, COL1, COL2, COL3, COL4, COL5) values (2, 'col1', 'col2', 'col3', 'col4', 'col5');

查詢原始表和MQT表。會發如今MQT表里也有數據了

select * from T;
select * from T_MQT;

原文鏈接: DB2物化視圖(Materialized Query Tables, MQT)



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM