• Tidak ada hasil yang ditemukan

Menonaktifkan Trigger

Dalam dokumen DAFTAR ISI - System Manajemen Basis Data (Halaman 139-167)

Sintaks:

Keterangan:

DISABLE : untuk menonaktifkan trigger yang sudah dibuat

ENABLE : untuk mengaktifkan kembali trigger yang sudah di DISABLE. Contoh 10.4 :

Untuk men-disable trigger UPDATE_PEGAWAI, gunakan sintaks berikut:

Rangkuman

1. Trigger adalah blok PL/SQL atau prosedur yang berhubungan dengan table, view, skema atau database yang dijalankan secara implicit pada saat terjadi event.

2. Tipe dari trigger adalah : Application trigger (diaktifkan pada saat terjadi event yang berhubungan dengan sebuah aplikasi) dan database trigger (diaktifkan pada saat terjadi event yang berhubungan dengan data)

3. Trigger dibuat pada saat yang tepat jika diperlukan yaitu untuk membentuk sebuah aksi tertentu terhadap suatu event dan memusatkan operasi global

4. Penggunaan trigger yang terlalu berlebihan akan menyebabkan terjadi sifat ketidaktergantungan yang terlalu kompleks sehingga akan mempersulit pemeliharaan dari aplikasi yang besar.

5. Trigger berisi komponen-komponen : trigger timing, trigger event, nama tabel, tipe trigger, klausa WHEN dan trigger body.

6. Beberapa event pada trigger bisa dikombinasikan dalam sebuah trigger dengan menggunakan predikat kondisional INSERTING, UPDATING dan DELETING

7. Pada Row Trigger, nilai dari kolom sebelum dan sesudah perubahan data dapat dirujuk dengan menggunakan OLD dan NEW qualifier.

Latihan pemesan PK id_pemesan nama_pemesan alamat_pemesan no_telp reservasi PK id_reservasi tgl_reservasi kegunaan jum_org tgl_awal tgl_akhir jam_awal jam_akhir id_pemesan id_punya_style id_petugas pembayaran PK id_pembayaran pembayaran_kartu pembayaran_tunai tgl_pembayaran id_reservasi petugas PK id_petugas nama_petugas jabatan fasilitas PK id_fasilitas nama_fasilitas harga_fasilitas jum_min_fasilitas jum_max_fasilitas banquet PK id_banquet nama_banquet jenis_banquet harga_banquet jum_min_banquet jum_max_banquet meeting_room PK id_mr nama_mr tarif_mr ukuran style PK id_style nama_style memiliki PK id_punya_style kapasitas id_mr id_style pesan_fasilitas PK id_pesan_fasilitas jum_pesan_fasilitas biaya_total_fasilitas id_reservasi id_fasilitas pesan_banquet PK id_pesan_banquet jum_pesan_banquet biaya_total_banquet id_reservasi id_banquet

1. Buatlah sebuah trigger yang dapat menginputkan nama dan tanggal user yang logon pada database di dalam sebuah table. Hasil table tersebut seperti di bawah ini :

3. Suatu partai akan dapat diikutsertakan dalam pemilu jika partai tersebut memiliki jumlah anggota minimal 100 orang. Buatlah trigger yang akan memeriksa jumlah anggota suatu partai jika partai tersebut ingin diikutsertakan dalam pemilu!

4. Buatlah contoh row level trigger dan statement level berdasarkan studi kasus KPK, kemudian analisa perbedaannya!

5. Jika ID_Petugas seorang petugas KPU berubah maka ID_Petugas pada tabel mendaftar pun harus berubah. Mengapa demikian? Bagaimana triggernya?

9

Query Optimization

Tujuan

1. Mahasiswa memahami konsep optimasi query. 2. Mahasiswa memahami konsep dan algoritma sorting

3. Mahasiswa dapat memahami dan menggunakan operator relational Overview

Proses dari optimisasi query meliputi tahapan-tahapan yang harus dilalui oleh suatu query tree dalam sebuah optimizer sehingga akan menghasilkan perencanaan aljabar secara fisik yang optimal, yang nantinya akan dijalankan untuk menghasilkan query yang diinginkan.

9.1

Query Optimization

Query Optimazion dalah proses dimana DBMS (Optimizer) menunjukkan strategi yang terbaik untuk menjalankan suatu query. Tugas utama optimizer adalah menemukan plan yang baik untuk mengevaluasi ekspresi. Dalam melakukan optimalisasi query harus memperhatikan cara alternatif untuk mengevaluasi suatu query yaitu :

 Ekuivalent ekspression

 Beberapa algoritma untuk beberapa operasi.

Tahap yang harus dilakukan pada saat melakukan optimalisasi query adalah evaluation plan yaitu secara tepat menentukan algoritma apa yang akan digunakan dan bagaimana mengeksekusi algoritma tersebut pada operasi- operasi yang ada.

Optimalisasi ekspresi aljabar relasional melibatkan dua langkah besar yaitu:  Mengumpulkan rencana alternatif untuk mengevaluasi ekspresi.

Biasanya, optimizer dianggap sebagai subset dari semua plan yang mungkin karena jumlah plan yang ada sangat banyak.

Optimizer Mode : a. Cost based optimizer

Optimizer akan memutuskan rencana eksekusi (execution plan ) mana yang terbaik dan paling efisien dengan mempertimbangkan pada ketersediaan path aksesnya dan juga berdasar pada statistik informasi untuk skema objek (tabel/indeks) yang di akses oleh sebuah sql statement.

Secara konsep, pendekatan cost-based terdiri atas 3 langkah berikut :  Optimizer membangkitkan seperangkat rencana eksekusi yang

potensial untuk SQL Statement berdasar pada ketersediaan path dan petunjuk tentang sql statement tersebut.

 Optimizer memperhitungkan cost pada tiap rencana eksekusi berdasarkan statistik pada kamus data untuk distribusi data dan karakteristik maupun informasi tentang penyimpanan dari tabel , indeks , dan partisi yang di akses oleh sebuah sql statement.

 Optimizer membandingkan biaya setiap execution plan, dan kemudian memilih plan dengan biaya paling rendah

b. Rules based optimizer

Optimizer memilih apakah menggunakan akses path pada beberapa pertimbangan faktor sebagai berikut :

1. Ketersediaan akses path pada tiap statement

 optimizer akan mengamati kondisi statement klausa WHERE untuk memutuskan akses path yg tersedia ( urutan kondisi dalam Note :

• Cost dapat diartikan sebagai sebuah nilai resource yg dibutuhkan untuk eksekusi sql statement dr beberapa execution plannya • Optimizer menghitung cost dari tiap kemungkinan metode akses

dan urutan pen-joinan berdasar estimasi resource seperti CPU time, memori,I/O untuk ekseskusi statement sql menggunakan plan • Execution plan secara serial dengan cost besar butuh waktu

eksekusi lebih banyak daripada cost yg kecil

• Execution plan secara parallel, penggunaan resource tidak langsung berpengaruh pada waktu yg dibutuhkan untuk eksekusi statement sql

2. Peringkat access path tersebut

 optimizer memilih akses path dengan peringkat terbanyak dan tertinggi

Tahapan proses optimisasi query secara umum adalah sebagai berikut :

1.

Memasukkan query ke dalam representasi internal berdasarkan ekspresi

aljabar yang sesuai.

2.

Mengkonversikannya ke dalam bentuk canonical dengan cara mula-mula dengan menggunakan cartesian product dari klausa FROM, setelah itu menggabungkan dan memilih kondisi-kondisi dari klausa WHERE dan melakukan proyeksi-proyeksi dari klausa SELECT.

3.

Memilih calon-calon prosedur low level, yaitu mempertimbangkan index- index atau jalan akses lainnya, membagi nilai-nilai penyimpanan data dari record-record untuk memilih satu atau lebih calon-calon prosedur untuk mengimplementasikan tiap-tiap operasi low level dalam query.

4.

Menghasilkan rencana-rencana query dan memilih yang termurah, yaitu membuat sekumpulan calon rencana-rencana query dan kemudian memilih yang termurah.

Sebelum proses optimisasi query dilakukan, sebuah query harus diproses dahulu di dalam parser untuk mengecek kevalidan query tersebut dan kemudian query tersebut diterjemahkan ke dalam sebuah bentuk internal, yaitu ekspresi relasi aljabar. Biasanya, hasil dari proses parsing di dalam parser adalah berupa sebuah bentuk tree yang disebut dengan parse tree.

Jika suatu ekspresi aljabar relasional mengandung lebih dari satu operasi primitif (select, project, join) maka ada dua cara untuk melaksanakan operasi- operasi ini:

a. Materialization

Evaluasi Materialization: evaluasi satu operasi pada satu waktu, dimulai dari yang paling dalam. Gunakan hasil antara (intermediate result) untuk materialisasi (membuat relasi temporer) untuk mengevaluasi operasi level berikutnya.

Contoh: pada gambar di bawah, hitung dan simpan

)

(

2500

account

balance

kemudian hitung join antara relasi temporer denga customer, simpan lagi sebagai relasi temporer, lakukan proyeksi pada customer-name untuk relasi temporer tersebut.

Evaluasi dengan materialisasi selalu dapat dilakukan. Tetapi cost untuk menuliskan hasil ke disk dan membacanya kembali dapat sangat tinggi. Rumus perhitungan cost untuk masing-masing operasi (bagian sebelumnya) mengabaikan biaya untuk menuliskan hasil ke disk, sehingga • Cost keseluruhan = Jumlah cost masing-masing operasi + cost untuk

menuliskan hasil-hasil antara ke disk

Untuk mempercepat materialisasi dilakukan dengan double buffering: menggunakan dua output buffer untuk masing-masing operasi, ketika satu buffer penuh maka tuliskan isinya ke disk sementara buffer yang lain diisi. Materialization memungkinkan penulisan ke disk dengan komputasi dilakukan secara bersamaan sehingga mengurangi waktu eksekusi b. Pipelining

Evaluasi Pipelining: merupakan evaluasi beberapa operasi secara bersamaan dan berikan hasil dari satu operasi ke operasi berikutnya. Contoh: di ekspresi sebelumnya, jangan simpan hasil dari

Melainkan, berikan tuple langsung ke join. Dengan cara yang sama, jangan simpan hasil join, berikan tuple langsung ke proyeksi. Cost yang dibutuhkan untuk melakukan pipelining lebih murah dari materialisasi karena tidak perlu menyimpan relasi temporer di disk. Namun, pipelining tidak selalu bisa dilakukan – misal, sort, hash-join. Agar pipelining efektif, gunakan algoritma yang membangkitkan output tuple pada saat tuple diterima sebagai input terhadap operasi tersebut. Pipeline dapat

)

(

2500

account

balance

Ekuivalences Rules

1. Conjunctive selection operation 2. Selection operation

3. Projection operation

4. Combine selection with cartesian product and theta join a. (E1 X E2) = E1 E2

b. 1(E1 2 E2) = E1 12 E2

5. Theta join operation (and natural joins) are commutative. E1  E2 = E2  E1

6. (a.) Natural join are associative: (E1 E2) E3 = E1 (E2 E3)

(b.) Theta Join are associative in the following manner (E1 1 E2) 2 3 E3 = E1 23 (E2 2 E3)

7. The selection operation distributes over the theta join operation under the following two conditions:

(a) When all the attributes in 0 involve only the attributes of one

of the expressions (E1) being joined.

0E1 E2) = (0(E1)) E2

(b) When  1 involves only the attributes of E1 and 2 involves

only the attributes of E2.

1E1 E2) = (1(E1)) ((E2))

))

(

(

)

(

2 1 2 1 

E

 

E

))

(

(

))

(

(

1 2 2 1 

E

 

E

) ( )) )) ( ( ( ( 2 1 1 t tn E t E t      

8. The projections operation distributes over the theta join operation as follows:

(a) if P involves only attributes from L1  L2

))

(

(

))

(

(

)

(

1... 2 1 1 ... 2 2 2 1 L

E

E

L

E

L

E

L

   (b) Consider a join E1  E2.

 Let L1 and L2 be sets of attributes from E1 and E2, respectively.

 Let L3 be attributes of E1 that are involved in join condition , but

are not in L1  L2, and let L4 be attributes of E2 that are involved

in join condition , but are not in L1  L2.

)))

(

(

))

(

((

)

...

(

1 2 1 2 1 3 1 ... 2 4 2 2 1 L

E

E

L L L L

E

L L

E

L



9. Set operations union and intersection E1E2=E2E1

E1  E2 = E2  E1 (*set difference is not commutative *).

10. Set union and intersection are associative (E1  E2)  E3 = E1  (E2  E3)

(E1  E2)  E3 = E1  (E2  E3)

11. The selection operation distributes over ,  and –.  (E1 – E2) =  (E1) – (E2)

and similarly for  and  in place of –Also:  (E1 – E2) = (E1) – E2

and similarly for  in place of –, but not for  12. The projection operation distributes over union

L(E1  E2) = (L(E1))  (L(E2))

9.2

Sorting

Sorting kumpulan record pada beberapa (search) key merupakan operasi yang sangat berguna. Key dapat berupa atribut tunggal atau daftar atribut terurut. Sorting perlu dilakukan dalam berbagai situasi, termasuk hal penting berikut:

1. Sorting record merupakan langkah pertama dalam bulk-loading tree index 2. Sorting berguna untuk menghilagkan salinan duplikasi pada kumpulan

Algoritma sorting :

a. Two-way Merge Sort Sederhana

Algoritma ini hanya memanfaatkan 3 page memory utama dan hanya direpresentasikan untuk tujuan pedagogikal. Walaupun seluruh file tidak muat dalam memory utama yang tersedia, kita dapat menyortirnya dengan memecah file tersebut menjadi subfile yang lebih kecil, menyortir subfile tersebut kemudian menggabungkan subfile tersebut dengan menggunakan sejumlah kecil memory utama pada waktu tertentu. Pada tahap pertama, halaman dalam file dibaca satu per satu. Setelah halaman dibaca, record didalamnya disortir dan halaman tersortir (sorted run panjangnya satu halaman) ditulis. Quicksort atau teknik sorting dalam memory yang lain dapat digunakan untuk menyortir record pada halaman. Pada tahap berikutnya, pasangan run dari output dari tahap sebelumnya dibaca dan digabungkan untuk menghasilkan run yang panjangnya 2 kali lipat panjang sebelumnya.

Jika jumlah halaman dalam file inputan 2k, untuk beberapa k maka :

- tahap 0 menghasilkan 2k run tersortir masing-masing satu halaman

- tahap 1 menghasilkan 2k-1 run tersortir masing-masing dua halaman

- tahap 2 menghasilkan 2k-2 run tersortir masing-masing empat

halaman, dan seterusnya sampai tahap k menghasilkan satu run 2k

halaman tersortir.

Dalam tiap tahap, kita membaca setiap halaman dalam file, memproses dan menulisnya. Oleh karena itu, kita mempunyai dua disk I/O per halaman, per tahap. Jumlah tahap adalah [log2 N]+1 dimana N

adalah jumlah halaman dalam file. Biaya keseluruhan adalah 2N ([log2

N]+1) I/O.

Algoritma ini hanya memerlukan tiga halaman buffer dalam memory utama. Observasi ini memunculkan hal penting, jadi sekalipun kita mempunyai ruang buffer yang lebih, algoritma two-way merge sort sederhana tidak akan memanfaatkanya secara efektif.

Contoh :

Dibawah ini terdapat file input dengan 7 buah halaman. Sorting tersebut memerlukan 2 tahap dan pada tiap tahap kita membaca dan menulis tujuh halaman , dengan total 56 I/O. Hasil ini sesuai dengan analisis sebelumnya karena:

2x7 ([log2 N7+1)= 56.

gambar 11.2 b

ket : dark page pada gambar menunjukan apa yang akan terjadi pada file delapan halaman; jumlah tahap tetap empat ([log2 8+1=4), tetapi kita

membaca dan menulis halaman tambahan dalam tiap tahap dengan total 64 I/O.

b. External Sorting

Algoritma ini memerlukan lebih dari tiga halaman buffer. Selain itu algoritma ini juga melakukan 2 modifikasi penting pada two-way merge sort :

 Pada tahap 0, baca B halaman dan sortir secara internal untuk menghasilkan run [N/B] masing-masing B halaman (kecuali run terakhir, yang mungkin berisi lebih sedikit halaman).

 Tahap i=1,2,... gunakan B-1 halaman buffer untuk input dan gunakan sisa halaman untuk output; dengan demikian kita melakukan (B-1) cara penggabungan dalam tiap tahap

Keuntungan external sort:

 Mengurangi jumlah run yang dihasilkan oleh tahap 0 sampai N1=[N/B]

 Dengan melakukan (B-1) cara penggabungan, jumlah tahap dapat dikurangi sehingga menjadi [logB-1 N1] +1

gambar 11.2 c Contoh :

Terdapat 5 buffer untuk mensort 108 halaman file,maka yang dilakukan adalah :

- tahap 0 menghasilkan [108/5]= 22 run tersortir, masing-masing 5 halaman kecuali run terakhir yang panjangnya 3 halaman

- tahap 1 menghasilkan [22/4]= 6 run tersortir, masing-masing 20 halaman kecuali run terakhir yang panjangnya 8 halaman

- tahap 2 menghasilkan [6/4]= 2 run tersortir, satu dengan 80 dan satu dengan 28 halaman

- tahap 3 menggabungkan dua run yang dihasilkan pada tahap 2 untuk menghasilkan file tersortir.

9.3

Operator Relational

9.3.1 Selection ( )

Selection merupakan salah satu operator yang digunakan untuk memilih (select) baris dari suatu relasi.

Contoh :

Sid Sname Rating Age 28 Yuppy 9 35.0 31 Lubber 8 55.5 44 Guppy 5 35.0

rating > 8(S2

)

9.3.2 Projection ()

Perhatikan query dibawah ini :

SELECT DISTINCT R.sid, R.bid FROM Reserves R

Optomizer menterjemahkan query diatas menjadi aljabar relasional πsid.rid Reserves. Secara umum, operasi proyeksi merupakan bentuk πattr1.attr2 (R). Untuk melakukan proyeksi hal yang harus dilakukan adalah:

- membuang atribut yang tidak diinginkan (misalnya, yang tidak ditentukan pada proyeksi )

- menghilangkan tuple duplikat apapun yang dihasilkan contoh : A B C α 10 1 α 20 1 β 30 1 β 40 2

Ada dua algoritma untuk melakukan proyeksi, yaitu : a. proyeksi berdasarkan sorting

langkah-lagkah melakukan proyeksi dengan sorting:

- men-scan R dan menghasilkan kumpulan tuple yang hanya berisi atribut yang diinginkan

- menyortir kumpulan tuple ini menggunakan kombinasi dari semua atributnya sebagai key untuk sorting

- men-scan hasil yang disortir, membandingkan tuple yang berdekatan dan membuang duplikat.

a. proyeksi berdasarkan hashing

jika kita mempunyai banyak page buffer, maka pendekatan hash-based bisa dipertimbangkan. Terdapat dua langkah untuk melakukan proyeksi dengan menggunakan algoritma ini :

- tahap partisi

Pada tahap partisi kita mempunyai satu page buffer input dan B-1 pagebuffer output. Relasi R dibaca ke dalam page buffer input, setiap satu halaman. Halaman input diproses sebagai berikut: tiap tuple, kita memproyeksikan atribut yang tidak diinginkan lalu mengaplikasikan fungsi hash h pada kombinasi dari semua atribut yang ada. Fungsi h

partisi, dan terdapat satu halaman output per partisi. Setelah proyeksi, tuple diisi ke halaman buffer output yang di hash menurut h.

Pada akhir partisi, kita mempunyai B-1 partisi, masing-masing berisi kumpulan tuple yang menggunakan nilai hash umum.

Dua tuple yang tercakup dalam partisi yang berbeda dijamin tidak menjadi duplikat karena mereka mempunyai nilai hash yang berbeda. Jadi, jika dua tuple merupakan duplikat, maka mereka berada dalam partisi yang sama.

- tahap eliminasi duplikat

kita membaca B-1 partisi satu per satu untuk menghilangkan duplikat.

9.3.3 Union ()

R  S menghasilkan contoh relasi yang berisi semua tuple yang terjadi dalam contoh relasi R atau contoh relasi S (atau keduanya). R dan S haruslah union compatible dan skema hasil identik dengan skema R. Dua contoh relasi dikatakan union compatible jika memenuhi syarat berikut :

 memiliki jumlah field yang sama

 field yang berurutan, dalam urutan dari kiri ke kanan, memiliki doamain yang sama.

Perhatikan bahwa nama field tidak digunakan dalam menentukan kompatibilitas union. Untuk memudahkan kita asumsikan bahwa field R  S mewarisi nama dari R jika field R punya nama.

Contoh :

Sid Sname Rating Age 22 Dustin 7 45.0 31 Lubber 8 55.5 58 Rusty 10 35.0

}

Sid Sname Rating Age

28 Yuppy 9 35.0 31 Lubber 8 55.5

44 Guppy 5 35.0 S1  S2 Tabel S1

9.3.4 Set-Difference

Operasi set-difference (R-S) menghasilkan salah satu contoh relasi yang berisi semua tuple yang terjadi baik pada R dan S. Relasi R dan S harus union compatible, dan skema hasil ditentukan identik dengan skema R. Contoh :

Sid Sname Rating Age 22 Dustin 7 45.0 31 Lubber 8 55.5 58 Rusty 10 35.0

}

Sid Sname Rating Age 28 Yuppy 9 35.0 31 Lubber 8 55.5 44 Guppy 5 35.0 58 Rusty 10 35.0

9.3.5 Algoritma Join

Ada beberapa algoritma berbeda untuk implementasi join, yaitu : a. Nested-loop join

Algoritma untuk menghitung theta join r  s for each tuple tr in r do begin

for each tuple ts in s do begin test pair (tr,ts) to see if they satisfy the join condition 

if they do, add tr • ts to the result. end

end

S1- S2 Tabel S1

Kelemahan dari algoritma ini adalah mempunyai cost yang mahal, karena harus memeriksa setiap pasangan tuple di kedua relasi. Dalam keadaan paling buruk (worst case), jika hanya mempunyai memory yang mampu menampung satu blok dari masing-masing relasi, perkiraan cost adalah

nr * Bs + br

Jika relasi yang lebih kecil dapat masuk seluruhnya ke dalam memory, maka gunakan itu sebagai relasi bagian dalam. Mengurangi biaya menjadi br + bs disk access.

Contoh :

Terdapat catalog berisi informasi berikut ini: - ncustomer = 10,000

- fcustomer = 25, sehingga bcustomer=10000/25=400

- ndepositor=5000

- fdepositor=50, sehingga bdepositor=5000/50=100

- V(customer-name,depositor) = 2500, rata-rata tiap nasabah punya dua rekening

Jawab :

Dengan mengasumsikan worst case, maka perkiraan biaya akan menjadi

– 5000*400 + 100 = 2,000,100 disk acess dengan depositor sebagai relasi luar (outer relation)

– 1000*100+400 = 1,000,400 disk access dengan customer sebagai relasi bagian luar

Jika relasi yang lebih kecil (depositor) dapat masuk seluruhnya di memory, maka perkiraan biaya akan menjadi 500 disk access.

b. Block nested-loop join

Algoritma ini merupakan jenis lain nested-loop join di mana masing- masing blok dari inner relation dipasangkan dengan outer relation. Algoritma block nested-loop join :

for each block Br ofr do begin for each block Bs of s do begin for each tuple tr in Br do begin for each tuple ts in Bs do begin

Check if (tr,ts) satisfy the join condition if they do, add tr • ts to the result. end

Cost yang dibutuhkan :

worst case: br*bs+br block access

Masing-masing blok di relasi bagian dalam s dibaca satu kali untuk masing-masing blok di relasi bagian luar (bukannya satu kali untuk masing-masing tuple di relasi bagian luar) Best case: br+bs block access

Perbaikan terhadap algoritma nested loop dan blok nested loop:

 Dalam blok nested-loop, gunakan M-2 disk blok sebagai ukuran blok untuk relasi bagian luar, di mana M = ukuran memory dalam blok; gunakan sisanya yang dua blok untuk menampung relasi bagian dalam dan outputnya

 Cost = [br/(M-2)] * bs + br

 Jika atribut equi-join merupakan kunci pada relasi bagian dalam, hentikan loop di bagian dalam (inner loop) pada saat pertama kali ditemukan nilai yang cocok

 Scan inner loop ke depan (forward) dan ke belakang (backward) secara bergantian, sehingga blok yang masih ada di buffer dapat digunakan

 Gunakan indeks di relasi bagian dalam jika tersedia (Indexed nested loop join)

c. Indexed nested-loop join

Indeks lookup dapat menggantikan file scan (pembacaan seluruh file) jika:

– Join adalah equi-join atau natural join dan

– Ada indeks untuk atribut join relasi bagian dalam (inner relation‘s join attribute)

 Bisa saja membangun indeks hanya untuk menghitung sebuah operasi join

Untuk masing-masing tuple tr di relasi luar r, gunakan indeks untuk mencari tuple di s yang memenuhi kondisi join dengan tuple tr. Pada keadaan worst case buffer hanya mempunyai ruang (space) untuk satu blok r, dan, untuk tiap-tiap tuple di r, kita melakukan indeks lookup di s Cost dari join ini adalah: br + nr*c

– Di mana c adalah cost untuk menjelajahi indeks dan mengambil semua tuple s yang cocok untuk satu tuple

– C dapat dianggap sebagai cost untuk satu buah operasi selection pada s menggunakan kondisi join

d. Merge-join

Join jenis ini dapat digunakan hanya untuk equi-join dan natural join dimana masing-masing blok hanya perlu dibaca sekali (asumsi semua tuple hasil join dapat masuk ke dalam memory) sehingga jumlah blok akses yang diperlukan untuk merge join adalah Br+bs+cost untuk mengurutkan relasi yang belum urut

Hybrid merge-join: Jika satu relasi telah diurutkan, sementara yang lainnya mempunyai indeks sekunder B+-tree pada atribut joinnya, maka: - Gabungkan relasi yang telah urut tersebut dengan nilai-nilai di node leaf

pada B+-tree

- Urutkan hasil pada tuple yang belum terurut berdasarkan alamat- alamat fisik penyimpanan tuple relasi yang belum terurut

- Pelaksanaan operasi join dilakukan berdasarkan urutan alamat fisik relasi yang belum terurut tersebut

 penelusuran secara sequensial lebih efisien dar penelusuran secara acak

gambar 11.4 a skema Merge join

Dalam dokumen DAFTAR ISI - System Manajemen Basis Data (Halaman 139-167)