SQL Academy · Pelajaran

Gabungan Hash berbanding Gabungan Cantum berbanding Gelung Bersarang

Kenali tiga strategi gabungan utama, profil kosnya, dan keadaan apabila setiap satunya menjadi pilihan terbaik perancang.

Pelajaran 3 daripada 414 langkah

Gabungan Hash berbanding Gabungan Cantum berbanding Gelung Bersarang ialah pelajaran SQL Academy percuma di CoddyKit. Ini ialah pelajaran 3 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran SQL Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus SQL Academy merangkumi sejumlah 4 pelajaran.

Tiga Strategi Cantuman

PostgreSQL mempunyai tiga algoritma cantuman fizikal:

  • Gelung Bersarang — untuk setiap baris luaran, imbas baris dalaman
  • Cantuman Cincangan — bina cincangan bagi bahagian dalaman, kemudian cari padanan menggunakan bahagian luaran
  • Cantuman Gabung — kedua-dua bahagian diisih, kemudian digabungkan serentak

Gelung Bersarang

Paling mudah: luaran × dalaman. Pantas apabila bahagian dalaman mempunyai indeks yang baik AND bahagian luaran 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)

Apabila Gelung Bersarang Lebih Baik

Bahagian luaran mempunyai sedikit baris AND bahagian dalaman mempunyai indeks pada kunci cantuman — Gelung Bersarang amat pantas. Kes terburuk: O(luaran × dalaman).

Cantuman Cincangan

Bina jadual cincangan pada satu bahagian (biasanya yang lebih kecil), kemudian cari padanan menggunakan bahagian yang satu lagi. Sangat sesuai untuk mencantumkan dua jadual besar apabila tiada indeks berguna pada kunci cantuman:

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_b

Apabila Cantuman Cincangan Lebih Baik

Dua jadual sederhana hingga besar, tiada indeks yang baik pada kunci cantuman, atau perancang memerlukan banyak baris. Terikat pada memori: jadual cincangan mesti muat dalam work_mem atau melimpah ke cakera.

Cantuman Gabung

Kedua-dua bahagian diisih mengikut kunci cantuman, kemudian ditelusuri bersama. Sangat sesuai apabila kedua-dua bahagian sudah diisih (contohnya melalui indeks yang sepadan):

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)

Apabila Cantuman Gabung Lebih Baik

Dua input besar yang telah diisih. Imbasan linear dengan penggunaan memori yang rendah. Kos pengisihan penting — jika kedua-dua bahagian memerlukan pengisihan nyata, cincangan biasanya lebih baik.

Memilih Antaranya

Perancang membuat pilihan berdasarkan:

  • Bilangan baris yang dianggarkan
  • Indeks yang tersedia
  • Memori (work_mem)
  • Pemalar kos dalam postgresql.conf

Memaksa Strategi (Untuk Diagnosis Sahaja)

Untuk penyahpepijatan, anda boleh melumpuhkan 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.

Melimpah ke Cakera

Jika jadual cincangan atau pengisihan melebihi work_mem, pengendali menulis fail sementara ke cakera — jauh lebih perlahan. Sama ada tingkatkan work_mem atau tulis semula pertanyaan.

Cantuman Selari

PostgreSQL boleh melaksanakan Cantuman Cincangan dan Cantuman Gabung secara selari (begitu juga imbasan berjujukan/indeks) — kelihatan sebagai Parallel Hash Join dengan Workers Planned dalam EXPLAIN.

Membaca Pilihan

Dalam EXPLAIN ANALYZE, nama nod cantuman memberitahu anda strateginya. Pilihan itu hampir sentiasa betul — apabila tidak, tumpukan perhatian pada statistik dan indeks sebelum memaksa strategi.

Imbas Kembali

Tiga strategi cantuman memenuhi bentuk pertanyaan yang berbeza.

  • Gelung Bersarang: bahagian luaran kecil + bahagian dalaman berindeks
  • Cincangan: jadual besar, tiada indeks berguna
  • Gabung: input yang telah diisih

Semakan Pantas

Anda mencantumkan dua jadual yang masing-masing mempunyai 10 juta baris berdasarkan lajur yang tidak berindeks. Algoritma cantuman manakah yang mungkin dipilih oleh perancang?

Percuma untuk bermula

Pelajari SQL dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
46
Pelajaran
183

Soalan Lazim

Adakah pelajaran “Gabungan Hash berbanding Gabungan Cantum berbanding Gelung Bersarang” percuma?

Ya — teks penuh “Gabungan Hash berbanding Gabungan Cantum berbanding Gelung Bersarang” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus SQL Academy, tingkat taraf kepada CoddyKit PRO. Kursus SQL Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Gabungan Hash berbanding Gabungan Cantum berbanding Gelung Bersarang”?

Kenali tiga strategi gabungan utama, profil kosnya, dan keadaan apabila setiap satunya menjadi pilihan terbaik perancang. Anda berlatih SQL Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan SQL Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran SQL Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 3 daripada 4.

Berapa lamakah pelajaran “Gabungan Hash berbanding Gabungan Cantum berbanding Gelung Bersarang” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran SQL Academy ini?

Ya. Setiap pelajaran SQL Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Membaca EXPLAIN dan EXPLAIN ANALYZE
  2. Imbasan Berjujukan berbanding Imbasan Indeks
  3. Gabungan Hash berbanding Gabungan Cantum berbanding Gelung Bersarang
  4. Mengenal Pasti dan Membetulkan Pertanyaan Perlahan
← Kembali ke SQL Academy