0Pricing
SQL Academy · Pelajaran

Penyetelan Kinerja Join Multi-Tabel

Baca rencana join, paksa urutan join dengan petunjuk, dan kurangi jumlah baris perantara agar kueri multi-tabel tetap cepat.

Penyetelan Kinerja Join Multi-Tabel adalah pelajaran SQL Academy gratis di CoddyKit. Ini adalah pelajaran 4 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.

Join Menggandakan Jumlah Baris

Jika A memiliki 10 ribu baris yang cocok dengan penyaring dan B memiliki 5 kecocokan untuk setiap baris A, A JOIN B menghasilkan 50 ribu baris. Tambahkan C dengan 5 kecocokan per baris → 250 ribu baris. Jumlah baris perantara menentukan biaya.

Saring Lebih Awal, Lakukan Join Belakangan

Terapkan predikat selektif sedini mungkin:

-- Slow — filters AFTER joining:
SELECT u.email FROM users u JOIN orders o ON o.user_id = u.id
WHERE u.country = 'US' AND o.total > 1000;

-- Same query, planner usually pushes filters down automatically.
-- For complex queries, force it with a CTE/subquery filter.

Buat Indeks pada Semua Kolom Join

Setiap sisi JOIN sebaiknya memiliki indeks pada kolom join (PK otomatis memiliki indeks, FK anak memerlukan indeks eksplisit):

CREATE INDEX orders_user_id_idx ON orders(user_id);

Kurangi Kolom untuk Mengurangi Memori

SELECT hanya kolom yang Anda perlukan. Baris perantara yang lebar dapat memperbesar penyangga hash dan pengurutan:

-- Wide:
SELECT * FROM users u JOIN orders o ON ...

-- Narrow:
SELECT u.id, u.email, o.id, o.total FROM users u JOIN orders o ON ...

Join Bintang dibandingkan Snowflake

Dalam analitik, menggabungkan tabel fakta dengan banyak tabel dimensi kecil adalah hal yang umum. Pastikan setiap dimensi memiliki indeks pada kuncinya.

Urutan Join Berpengaruh (Terkadang)

Perencana memilih urutan join, tetapi jika tabelnya banyak (≥ 12), perencana mungkin berhenti menjelajah. Sesuaikan join_collapse_limit atau tulis ulang sebagai CTE.

CTE sebagai Penghalang Optimasi

Dalam PG ≥ 12, CTE secara bawaan disisipkan. Untuk memaksa materialisasi sebagai penghalang perencana, gunakan WITH ... AS MATERIALIZED. Ini berguna ketika Anda ingin menghitung perantara kecil sekali saja.

Hash Join dibandingkan Merge Join dibandingkan Nested Loop

Perencana memilih berdasarkan perkiraan jumlah baris. Jalankan EXPLAIN ANALYZE untuk melihat pilihan yang dibuat dan apakah perkiraannya akurat.

EXPLAIN (ANALYZE, BUFFERS)
SELECT ... FROM big_a JOIN big_b ON ...;

Perkiraan Buruk Menghasilkan Rencana Buruk

Jika rows dalam EXPLAIN ANALYZE sangat berbeda dari actual rows, statistiknya sudah usang. Jalankan ANALYZE; untuk korelasi multi-kolom, gunakan statistik tambahan.

ANALYZE orders;
CREATE STATISTICS orders_country_status (dependencies)
  ON country, status FROM orders;

Hindari Fungsi pada Kolom Berindeks

Fungsi pada kunci join yang memiliki indeks menonaktifkan penggunaan indeks tersebut. Tambahkan indeks ekspresi atau tulis ulang kuerinya:

-- Bad (LOWER on indexed email kills the index):
ON LOWER(u.email) = LOWER(c.email)

-- Better — add a functional index:
CREATE INDEX users_email_lower ON users(LOWER(email));

Tampilan Terwujud untuk Join Berat

Jika join 5 arah menjadi sumber dasbor, wujudkan hasilnya dan segarkan setiap malam. Tukarkan kemutakhiran data dengan kecepatan.

Profilkan Kueri Nyata

Gunakan pg_stat_statements untuk menemukan kueri dengan banyak join yang paling lambat. Optimalkan kueri yang benar-benar menimbulkan masalah.

Ringkasan

Keberhasilan join banyak tabel bergantung pada:

  • Indeks pada setiap kolom join
  • Predikat selektif yang didorong ke bawah
  • Statistik yang akurat (ANALYZE)
  • Proyeksi yang ringkas
  • Lakukan materialisasi jika penggunaan ulang lebih penting daripada kemutakhiran

Pemeriksaan Singkat

Anda melihat EXPLAIN ANALYZE menampilkan perkiraan rows=1, tetapi actual rows=500000. Apa perbaikan yang paling mungkin?

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Penyetelan Kinerja Join Multi-Tabel” gratis?

Ya — teks lengkap “Penyetelan Kinerja Join Multi-Tabel” 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 “Penyetelan Kinerja Join Multi-Tabel”?

Baca rencana join, paksa urutan join dengan petunjuk, dan kurangi jumlah baris perantara agar kueri multi-tabel tetap cepat. 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 4 dari 4.

Berapa lama pelajaran “Penyetelan Kinerja Join Multi-Tabel” 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

  1. CROSS JOIN dan Hasil Kali Kartesius
  2. Lateral Join (LATERAL JOIN)
  3. Anti-Join dan Semi-Join (NOT EXISTS)
  4. Penyetelan Kinerja Join Multi-Tabel
← Kembali ke SQL Academy