HASH JOIN
Hash join digunakan ketika men-join tabel-tabel yang berukuran besaratau dengan set data yang besar. Hashjoin memerlukan Equijoin predikat (predikat membandingkan nilai dari satu tabeldengan nilai-nilai dari tabel lain menggunakan operator yang sama ‘=’).
Optimizermenggunakan hash join untuk join dengan dua tabel jikajoin menggunakan Equijoindan jika salah satu dari kondisi berikut benar:
Optimizer menggunakan lebih kecil dari dua tabel atau sumber data untukmembangun sebuah tabel hash dalam memori. Kemudian scan tabel yang lebih besar, menyelidiki tabel hash untukmenemukan baris join. Metode ini paling baik digunakan ketika tabel kecil cocokdi memori yang tersedia. Biaya kemudian dibatasi untuk melewati single readuntuk dua tabel. Hash join akan digunakan, jika tidak ada indeks yang memadaipada kolom join. Ini adalah situasi terburuk.
Query optimizer membuat hash join dalam duatahap, yaitu :
a. membangun (build) tabel hash dimemori, yang lebih kecil dari dua tabel
b. Probe ini tabel hash dengan nilaihash untuk setiap tabel baris kedua
AlgoritmaHash Join :
Fase Build
For each R1
begin
generate hash value of R1 join key
insert into build table to appropriate hash bucket
end
begin
generate hash value of R1 join key
insert into build table to appropriate hash bucket
end
Fase Probe
for each R2
begin
generate hash value of R2 join key
for each R1 in corresponding hash bucket
if match R1 and R2
output (R1,R2)
end
begin
generate hash value of R2 join key
for each R1 in corresponding hash bucket
if match R1 and R2
output (R1,R2)
end
Jadi hash join memiliki dua input, yaitumasukan membangun dan masukan probe.
Contoh hash join :
select e.last_name, d.department_name, d.location_id
from employees e, departments d, locations l
where e.department_id = d.department_id;