HASH JOIN
Hash join digunakan ketika men-join tabel-tabel yang berukuran besar atau dengan set data yang besar. Hash join memerlukan Equijoin predikat (predikat membandingkan nilai dari satu tabel dengan nilai-nilai dari tabel lain menggunakan operator yang sama ‘=’).
Optimizer menggunakan hash join untuk join dengan dua tabel jikajoin menggunakan Equijoin dan jika salah satu dari kondisi berikut benar:
Optimizer menggunakan lebih kecil dari dua tabel atau sumber data untuk membangun sebuah tabel hash dalam memori. Kemudian scan tabel yang lebih besar, menyelidiki tabel hash untuk menemukan baris join. Metode ini paling baik digunakan ketika tabel kecil cocok di memori yang tersedia. Biaya kemudian dibatasi untuk melewati single read untuk dua tabel. Hash join akan digunakan, jika tidak ada indeks yang memadai pada kolom join. Ini adalah situasi terburuk.
Query optimizer membuat hash join dalam dua tahap, yaitu :
a. membangun (build) tabel hash di memori, yang lebih kecil dari dua tabel
b. Probe ini tabel hash dengan nilai hash untuk setiap tabel baris kedua
Algoritma Hash 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, yaitu masukan 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;