DB2 物化查詢表以及其他常用表的介紹
文章主要描述的是DB2 物化查詢表,同時也有對MQT、總結(jié)表(summary)和staging表的介紹,我們?yōu)榱烁玫膶ζ溥M行解說,我們是以一些實用的例子展示如何創(chuàng)建和使用物化查詢表。 物化查詢表(MQT)的定義是以一次查詢的結(jié)果為基礎(chǔ)的。
MQT 可以顯著提高查詢的性能。本文將介紹 MQT、總結(jié)表(summary)和 staging 表,并通過一些實用的例子展示如何創(chuàng)建和使用物化查詢表。
物化查詢表(MQT)是一種以一次查詢的結(jié)果為基礎(chǔ)定義的表。包含在物化查詢表中的數(shù)據(jù)來自定義物化查詢表時所基于的一個或多個表。而 總結(jié)表(也稱自動總結(jié)表,AST)對于 IBM® DB2® Universal Database™(UDB)for Linux、 UNIX® 和 Windows®(DB2 UDB)的用戶來說應(yīng)該感到比較熟悉,它們可以看作是特殊的 MQT。fullselect 是總結(jié)表定義的一部分,它包含一個 GROUP BY 子句,該子句總結(jié) fullselect 中所引用表中的數(shù)據(jù)。
您可以將 MQT 看作一種物化的視圖。視圖和 MQT 都是基于一個查詢來定義的。每當(dāng)視圖被引用時,視圖所基于的查詢便會運行。但是,MQT 實際上則是將查詢結(jié)果保存為數(shù)據(jù),您可以使用 MQT 中的這些數(shù)據(jù),而不是使用底層表中的數(shù)據(jù)。
物化查詢表可以顯著提高查詢的性能,尤其是提高復(fù)雜查詢的性能。如果優(yōu)化器確定查詢或查詢的一部分可以用一個 MQT 來解決,那么就會重寫查詢,以便利用 MQT。
MQT 可以在創(chuàng)建表時定義,或者定義為系統(tǒng)維護的 MQT,或者定義為用戶維護的 MQT。下面的幾個小節(jié)將介紹這兩種類型的 MQT,另外再介紹總結(jié)表和 staging 表。后面的例子要求連接到 SAMPLE 數(shù)據(jù)庫。如果您系統(tǒng)上還沒有創(chuàng)建 SAMPLE 數(shù)據(jù)庫,那么可以通過在命令行提示符下輸入 db2sampl 命令來創(chuàng)建這個數(shù)據(jù)庫。
系統(tǒng)維護的 MQT
這種物化查詢表中的數(shù)據(jù)是由系統(tǒng)維護的。當(dāng)創(chuàng)建這種類型的 MQT 時,可以指定表數(shù)據(jù)是 REFRESH IMMEDIATE 還是 REFRESH DEFERRED。通過 REFRESH 關(guān)鍵字可以指定如何維護數(shù)據(jù)。DEFERRED 的意思是,表中的數(shù)據(jù)可以在任何時候通過 REFRESH TABLE 語句來刷新。
不管是 REFRESH DEFERRED 還是 REFRESH IMMEDIATE 類型的系統(tǒng)維護的 MQT,對它們的 insert、update 或 delete 操作都是不允許的。但是,對于 REFRESH IMMEDIATE 類型的系統(tǒng)維護的 MQT,可以通過 對底層表的更改(即 insert、update 或 delete 操作)來更新。
清單 1 展示了一個創(chuàng)建 REFRESH IMMEDIATE 類型的系統(tǒng)維護的 MQT 的例子。這個表名為 EMP,它基于 SAMPLE 數(shù)據(jù)庫中的底層表 EMPLOYEE 和 DEPARTMENT。由于 REFRESH IMMEDIATE MQT 要求查詢的 select 列表中引用的每個表中至少有一個惟一鍵,所以我們首先在 EMPLOYEE 表的 EMPNO 列上定義一個惟一性約束,另外還在 DEPARTMENT 表的 DEPTNO 列上定義一個惟一性約束。
DATA INITIALLY DEFERRED 子句的意思是,在執(zhí)行 CREATE TABLE 語句的時候,并不將數(shù)據(jù)插入到表中。MQT 被創(chuàng)建好之后,就處于檢查暫掛(check pending)狀態(tài)(請參閱 DB2 基礎(chǔ): 闡明表和表空間的狀態(tài)),在對它執(zhí)行 SET INTEGRITY 語句之前,不能查詢它。IMMEDIATE CHECKED 子句規(guī)定,根據(jù)用于定義該 MQT 的查詢對數(shù)據(jù)進行檢查,并刷新數(shù)據(jù)。
NOT INCREMENTAL 子句規(guī)定對整個表進行完整性檢查。通過查詢 EMP 物化查詢表發(fā)現(xiàn),它現(xiàn)在已經(jīng)填入了數(shù)據(jù)。
清單 1. 創(chuàng)建由系統(tǒng)維護的 MQT
- 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
- select * from emp
- EMPNO FIRSTNME LASTNAME PHONENO DEPTNO DEPARTMENT MGRNO
- ------ ------------ --------------- ------- ------ ------------ ------
- 000010 CHRISTINE HAAS 3978 A00 SPIFFY COMPU 000010
- 000020 MICHAEL THOMPSON 3476 B01 PLANNING 000020
- 000030 SALLY KWAN 4738 C01 INFORMATION 000030
- 000050 JOHN GEYER 6789 E01 SUPPORT SERV 000050
- 000060 IRVING STERN 6423 D11 MANUFACTURIN 000060
- 000070 EVA PULASKI 7831 D21 ADMINISTRATI 000070
- 000090 EILEEN HENDERSON 5498 E11 OPERATIONS 000090
- 000100 THEODORE SPENSER 0972 E21 SOFTWARE SUP 000100
- 000110 VINCENZO LUCCHESSI 3490 A00 SPIFFY COMPU 000010
- 000120 SEAN O'CONNELL 2167 A00 SPIFFY COMPU 000010
- 000130 DOLORES QUINTANA 4578 C01 INFORMATION 000030
- ...
- 000340 JASON GOUNOT 5698 E21 SOFTWARE SUP 000100
- 32 record(s) selected.
- connect reset
以上的相關(guān)內(nèi)容就是對DB2 物化查詢表的介紹,望你能有所收獲。
【編輯推薦】