Hash Join vs Merge Join vs Nested Loop
Kenali tiga strategi join utama, profil biayanya, dan kapan masing-masing menjadi pilihan terbaik perencana
Hash Join vs Merge Join vs Nested Loop adalah pelajaran SQL Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar SQL Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus SQL Academy mencakup 4 pelajaran total.
Tiga Strategi Penggabungan
PostgreSQL memiliki tiga algoritme penggabungan fisik:
- Perulangan Bersarang — untuk setiap baris luar, pindai sisi dalam
- Penggabungan Hash — buat hash dari sisi dalam, lalu cari dengan sisi luar
- Penggabungan Merge — kedua sisi diurutkan, lalu digabungkan secara bersamaan
Perulangan Bersarang
Yang paling sederhana: sisi luar × sisi dalam. Cepat ketika sisi dalam memiliki indeks yang baik DAN sisi luar berukuran kecil:
EXPLAIN ANALYZE
SELECT * FROM users u JOIN orders o ON o.user_id = u.id
WHERE u.id = 42;
-- Nested Loop
-- -> Index Scan on users where id = 42 (rows=1)
-- -> Index Scan on orders_user_id_idx (rows=5)Saat Perulangan Bersarang Lebih Unggul
Sisi luar memiliki sedikit baris DAN sisi dalam memiliki indeks pada kunci penggabungan—Perulangan Bersarang sangat cepat. Kasus terburuk: O(sisi luar × sisi dalam).
Penggabungan Hash
Buat tabel hash pada salah satu sisi (biasanya yang lebih kecil), lalu lakukan pencarian dengan sisi lainnya. Sangat baik untuk menggabungkan dua tabel besar ketika tidak ada indeks yang berguna pada kunci penggabungan:
EXPLAIN ANALYZE
SELECT * FROM big_a a JOIN big_b b ON a.key = b.key;
-- Hash Join (cost=10000..50000)
-- -> Seq Scan on big_a
-- -> Hash
-- -> Seq Scan on big_bSaat Penggabungan Hash Lebih Unggul
Dua tabel berukuran menengah hingga besar, tidak ada indeks yang baik pada kunci penggabungan, atau perencana memerlukan banyak baris. Batas memori: tabel hash harus muat dalam work_mem atau meluber ke disk.
Penggabungan Merge
Kedua sisi diurutkan berdasarkan kunci penggabungan, lalu ditelusuri bersama. Sangat baik ketika kedua sisi sudah diurutkan (misalnya oleh indeks yang sesuai):
EXPLAIN ANALYZE
SELECT * FROM big_a a JOIN big_b b ON a.key = b.key
ORDER BY a.key;
-- Merge Join
-- -> Index Scan on big_a (a.key ASC)
-- -> Index Scan on big_b (b.key ASC)Saat Penggabungan Merge Lebih Unggul
Dua masukan besar yang sudah diurutkan. Pemindaian linear, penggunaan memori rendah. Biaya pengurutan penting—jika kedua sisi perlu diurutkan secara eksplisit, hash biasanya lebih unggul.
Memilih di Antara Ketiganya
Perencana memilih berdasarkan:
- Perkiraan jumlah baris
- Indeks yang tersedia
- Memori (
work_mem) - Konstanta biaya dalam postgresql.conf
Memaksa Strategi (Hanya untuk Diagnosis)
Untuk penelusuran masalah, Anda dapat menonaktifkan strategi:
SET enable_hashjoin = off;
SET enable_mergejoin = off;
SET enable_nestloop = off;
-- Re-run EXPLAIN to see what the planner picks instead.
-- NEVER persist these in production.Meluber ke Disk
Jika tabel hash atau pengurutan melebihi work_mem, operator menulis berkas sementara ke disk—jauh lebih lambat. Naikkan work_mem atau tulis ulang kueri.
Penggabungan Paralel
PostgreSQL dapat menjalankan Penggabungan Hash dan Penggabungan Merge secara paralel (serta pemindaian sekuensial/indeks)—terlihat sebagai Parallel Hash Join dengan Workers Planned dalam EXPLAIN.
Membaca Pilihan
Dalam EXPLAIN ANALYZE, nama simpul penggabungan memberi tahu Anda strateginya. Pilihan ini hampir selalu tepat—jika tidak, fokuslah pada statistik dan indeks sebelum memaksa strategi.
Rangkuman
Tiga strategi penggabungan digunakan untuk bentuk masalah yang berbeda.
- Perulangan Bersarang: sisi luar kecil + sisi dalam berindeks
- Hash: tabel besar, tidak ada indeks yang berguna
- Merge: masukan yang sudah diurutkan
Pemeriksaan Singkat
Anda menggabungkan dua tabel yang masing-masing berisi 10 juta baris berdasarkan kolom tanpa indeks. Algoritme penggabungan mana yang kemungkinan besar dipilih perencana?
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Hash Join vs Merge Join vs Nested Loop” gratis?
Ya — teks lengkap “Hash Join vs Merge Join vs Nested Loop” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus SQL Academy, upgrade ke CoddyKit PRO. Kursus SQL Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Hash Join vs Merge Join vs Nested Loop”?
Kenali tiga strategi join utama, profil biayanya, dan kapan masing-masing menjadi pilihan terbaik perencana Kamu berlatih SQL Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai SQL Academy?
Tidak diperlukan pengalaman sebelumnya. SQL Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.
Berapa lama pelajaran “Hash Join vs Merge Join vs Nested Loop” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran SQL Academy ini?
Ya. Setiap pelajaran SQL Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Membaca EXPLAIN dan EXPLAIN ANALYZE
- Pemindaian Berurutan vs Pemindaian Indeks
- Hash Join vs Merge Join vs Nested Loop
- Mengidentifikasi dan Memperbaiki Kueri Lambat