0Pricing
PostgreSQL Performance & Query Optimization · Pelajaran

Mengoptimalkan Join LATERAL dan Pencarian Berkorelasi

Pelajari cara join LATERAL memungkinkan subkueri merujuk kolom dari tabel sebelumnya, serta cara menggunakannya untuk menggantikan subkueri berkorelasi yang lambat dengan pencarian per baris yang efisien.

Mengoptimalkan Join LATERAL dan Pencarian Berkorelasi adalah pelajaran PostgreSQL Performance & Query Optimization 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 PostgreSQL Performance & Query Optimization, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus PostgreSQL Performance & Query Optimization mencakup 4 pelajaran total.

Bagian dari pelajaran ini belum diterjemahkan dan ditampilkan dalam bahasa Inggris.

What is a LATERAL Join?

A LATERAL join lets a subquery in the FROM clause reference columns from tables listed before it. Without LATERAL, a subquery in FROM cannot see the outer rows.

The Problem It Solves

Suppose you want, for each customer, their three most recent orders. A plain join cannot easily limit rows per customer. LATERAL evaluates the subquery once per outer row, so a per-row LIMIT works.

Basic Syntax

Place LATERAL before the subquery and reference the outer table inside it.

SELECT c.name, o.id, o.total
FROM customers c
CROSS JOIN LATERAL (
  SELECT id, total
  FROM orders
  WHERE orders.customer_id = c.id
  ORDER BY created_at DESC
  LIMIT 3
) o;

LEFT JOIN LATERAL

Use LEFT JOIN LATERAL ... ON true when you still want outer rows that have no matching subquery results, such as customers with no orders.

SELECT c.name, o.id
FROM customers c
LEFT JOIN LATERAL (
  SELECT id FROM orders
  WHERE orders.customer_id = c.id
  ORDER BY created_at DESC LIMIT 1
) o ON true;

LATERAL vs Correlated Subquery

A correlated subquery in the SELECT list can only return one column per row. LATERAL can return multiple columns and multiple rows, making it far more flexible.

Indexing for LATERAL

Because the subquery runs once per outer row, the inner filter and sort must be index-backed. Create a composite index matching the WHERE and ORDER BY columns.

CREATE INDEX idx_orders_cust_created
ON orders (customer_id, created_at DESC);

Reading the Plan

A well-optimized LATERAL shows a Nested Loop with an Index Scan on the inner side. If you see a Seq Scan inside the loop, the supporting index is missing.

EXPLAIN ANALYZE
SELECT c.name, o.id
FROM customers c
CROSS JOIN LATERAL (
  SELECT id FROM orders
  WHERE orders.customer_id = c.id
  ORDER BY created_at DESC LIMIT 3
) o;

LATERAL with Set-Returning Functions

LATERAL also works with functions like unnest or jsonb_array_elements, expanding array columns per row.

SELECT p.id, tag
FROM products p
CROSS JOIN LATERAL unnest(p.tags) AS tag;

Top-N Per Group Pattern

The most common use of LATERAL is the top-N-per-group query. It is usually faster than window-function approaches when N is small and an index supports the order.

When to Avoid LATERAL

If the outer table is huge and the inner subquery has no supporting index, running it millions of times is slow. In that case a window function or a single aggregated join may win. Always measure both.

Passing Computed Values Forward

LATERAL can also compute an intermediate value and reuse it in later expressions, avoiding repeating the same calculation. Each LATERAL block sees the columns produced before it.

SELECT o.id, m.margin
FROM orders o
CROSS JOIN LATERAL (
  SELECT o.total - o.cost AS margin
) m
WHERE m.margin > 0;

Quick Check

Test your LATERAL knowledge.

Recap

You learned LATERAL joins:

  • They let a FROM-clause subquery see earlier tables' columns
  • Perfect for top-N-per-group and per-row lookups
  • Use LEFT JOIN LATERAL ... ON true to keep unmatched outer rows
  • Back the inner filter and sort with a composite index
  • Confirm a Nested Loop + Index Scan in the plan

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Mengoptimalkan Join LATERAL dan Pencarian Berkorelasi” gratis?

Ya — teks lengkap “Mengoptimalkan Join LATERAL dan Pencarian Berkorelasi” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus PostgreSQL Performance & Query Optimization, upgrade ke CoddyKit PRO. Kursus PostgreSQL Performance & Query Optimization mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Mengoptimalkan Join LATERAL dan Pencarian Berkorelasi”?

Pelajari cara join LATERAL memungkinkan subkueri merujuk kolom dari tabel sebelumnya, serta cara menggunakannya untuk menggantikan subkueri berkorelasi yang lambat dengan pencarian per baris yang efi… Kamu berlatih PostgreSQL Performance & Query Optimization 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 PostgreSQL Performance & Query Optimization?

Tidak diperlukan pengalaman sebelumnya. PostgreSQL Performance & Query Optimization 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 “Mengoptimalkan Join LATERAL dan Pencarian Berkorelasi” 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 PostgreSQL Performance & Query Optimization ini?

Ya. Setiap pelajaran PostgreSQL Performance & Query Optimization 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. Memahami Algoritme Penggabungan
  2. Menulis Ulang Penggabungan Kompleks
  3. Subkueri vs. CTE vs. Penggabungan
  4. Mengoptimalkan Join LATERAL dan Pencarian Berkorelasi
← Kembali ke PostgreSQL Performance & Query Optimization