Oleh: denysutani | Oktober 15, 2009

DB2 – Materialized Query Table

Materialized Query Table (MQT) adalah sebuah table yang terbuat dari hasil sebuah query. Data yang ada di MQT berasal dari satu atau lebih table. MQT dapat dibayangkan seperti sebuah view. Namun query di view akan dijalankan ketika sebuah view dilihat, namun MQT menyimpan hasil query sebagai data sehingga tidak perlu melakukan query kembali.

Menggunakan MQT ini dapat meningkatkan kinerja terutama untuk query yang kompleks. Jika optimizer menganggap sebuah query atau sebagian dari query dapat menggunakan MQT, query dapat dibuat ulang untuk mendapatkan keuntungan dari MQT.

Ketika kita membuat MQT, kita dapat menentukan apakah table tersebut akan dimaintain oleh system atau oleh user. Jika dimaintain oleh system, maka tidak bisa dilakukan operasi insert, update atau delete terhadap table tersebut.

Ketika kita membuat MQT, juga kita dapat menentukan apakah data akan REFRESH IMMEDIATE atau REFRESH DEFERRED. Dengan ini kita dapat menentukan apakah data akan berubah secara otomotis jika terjadi perubahan pada table yang direferensi (REFRESH IMMEDIATE) atau terjadi saat diinginkan saja (REFRESH DEFERRED)

Sebelum menggunakan MQT, kita harus melakukan SET INTEGRITY terlebih dahulu karena MQT berada dalam check pending state.

Kita akan mencoba mempraktekkan MQT.
1. Buat sebuah table untuk menampung hasil query
2. Buat sebuah script bernama mqt.txt dan berisi script sebagai berikut
———————————————————————–
connect to sample;

alter table employee add unique (empid);
alter table department add unique (deptno);

create table emptest as (select e.empno,e.firstnme,e.lastname,d.deptno,d.deptname from employee e,department d where e.workdept = d.deptno)
data initially deferred refresh immediate;

set integrity for emptest immediate checked not incremental;
———————————————————————–

3. Kemudian jalankan db2cmd, arahkan ke path tempat script berasa dan ketikkan db2 – tvf mqt.txt

Table emptest diatas merupakan table yang dimaintained oleh system. Sehingga jika kita melakukan operasi insert, update atau delete maka akan muncul error DB21034E.

4. Buat sebuah script bernama mqt2.txt dan berisi script berikut
connect to sample;

create table ontario_2005_sales_team as (select distinct e.empno,e.firstnme,e.lastname, e.workdept, e.phoneno, ‘Ontario’ as region, year(s.sales_date) as year
from employee e, sales s
where e.lastname = s.sales_person and year(s.sales_date)= 2005
and left(s.region, 3) = ‘Ont’)
data initially deferred refresh deferred maintained by user;

set integrity for ontario_2005_sales_team materialized query immediate unchecked;

export to ontario_2005_sales_team.del of del
select distinct e.empno, e.firstnme,e.lastname,e.workdept,e.phoneno, ‘Ontario’ as region, year(s.sales_date) as year
from employee e, sales s
where e.lastname = s.sales_person and year(s.sales_date) = 2005 and left(s.region,3) =’Ont’;

import from ontario_2005_sales_team.del of del insert into ontario_2005_sales_team;

insert into ontario_2005_sales_team values(‘006900′,’RUSS’,’DYERS’,’D44′,’1234′,’Ontario’,2005);

select * from ontario_2005_sales_team;

5. Kemudian jalankan db2cmd, arahkan ke path tempat script berasa dan ketikkan db2 – tvf mqt.txt

Jika kita melihat, maka command insert yang kita lakukan diatas berhasil dengan baik. Hal ini terjadi karena kita menggunakan MAINTAINED BY USER.

Source
http://www.ibm.com/developerworks/data/library/techarticle/dm-0509melnyk/


Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

Kategori

%d blogger menyukai ini: