Hash Join [Sistem Basis Data]


     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:
  • Sejumlah data besar yang harus join.
  • Sebuah fraksi besar tabel harus join.
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

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
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;