0Pricing
SQL Academy · Pelajaran

Indeks Komposit dan Urutan Kolom

Tentukan urutan kolom untuk indeks komposit, pahami aturan awalan-kiri, dan rancang indeks yang mencakup beberapa kueri

Indeks Komposit dan Urutan Kolom adalah pelajaran SQL Academy gratis di CoddyKit. Ini adalah pelajaran 2 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.

Apa Itu Indeks Gabungan

Indeks pada lebih dari satu kolom. B-tree PostgreSQL dapat mengindeks hingga 32 kolom; dalam praktiknya, 2–4 kolom adalah jumlah yang umum.

CREATE INDEX orders_user_created_idx ON orders(user_id, created_at DESC);

Mengapa Menggunakannya

Dua skenario:

  • Kueri memfilter beberapa kolom sekaligus
  • Kueri memfilter satu kolom dan mengurutkan berdasarkan kolom lainnya

Aturan Prefiks Paling Kiri

Indeks pada (a, b, c) dapat melayani:

  • WHERE a = ?
  • WHERE a = ? AND b = ?
  • WHERE a = ? AND b = ? AND c = ?

Indeks ini NOT melayani WHERE b = ? saja maupun WHERE c = ?.

Urutan Itu Penting

Letakkan kolom yang paling selektif DAN paling sering difilter di urutan pertama. Kolom kesetaraan sebelum kolom rentang:

CREATE INDEX orders_user_total_idx ON orders(user_id, total);

-- Best for:  WHERE user_id = 42 AND total > 100
-- Also OK:  WHERE user_id = 42
-- Useless:  WHERE total > 100   (without user_id)

Kesetaraan vs Rentang

Predikat kesetaraan menggunakan indeks secara efisien; rentang menggunakannya tetapi membatasi kegunaan selanjutnya. Kolom kesetaraan harus diletakkan lebih dahulu:

-- Index: (status, created_at)
WHERE status = 'paid' AND created_at >= ...   -- both columns used
WHERE created_at >= ... AND status = 'paid'  -- index used for status, range scan on created_at

Urutan Indeks = Urutan Pengurutan

Indeks pada (user_id, created_at DESC) melayani "pesanan pengguna, terbaru lebih dahulu" tanpa langkah pengurutan:

EXPLAIN ANALYZE
SELECT * FROM orders
WHERE user_id = 42
ORDER BY created_at DESC LIMIT 10;
-- Index Scan, no Sort node needed

Menyertakan Kolom Non-Kunci (INCLUDE)

PG 11+ mendukung INCLUDE untuk indeks "yang mencakup semua kolom"—kolom tambahan disimpan di daun, tetapi tidak digunakan untuk pengurutan:

CREATE INDEX orders_user_idx ON orders(user_id)
  INCLUDE (total, status);

-- Enables Index-Only Scan for queries that need just these columns.

Kapan Tidak Membuat Indeks Gabungan

Jika kolom dikuerikan secara independen, dua indeks satu kolom dapat melayani lebih banyak kueri. Indeks gabungan menukar fleksibilitas dengan "semua kebutuhan satu kueri".

Kombinasi Indeks Bitmap

PostgreSQL dapat menggabungkan beberapa indeks satu kolom melalui Pemindaian Indeks Bitmap:

EXPLAIN ANALYZE
SELECT * FROM orders WHERE user_id = 42 AND status = 'paid';
-- BitmapAnd of two index scans — works without a composite, but slower than the right composite.

Waspadai Pembengkakan Indeks

Indeks gabungan lebih lebar. Indeks yang lebih lebar = berkas lebih besar = lebih sedikit bagian indeks yang muat dalam tembolok. Tentukan dengan cermat.

Menentukan Urutan Kolom — Contoh Terapan

Kueri: “pesanan untuk satu pengguna dalam rentang tanggal, diurutkan berdasarkan tanggal”.

-- Index design:
CREATE INDEX orders_user_created_idx
  ON orders(user_id, created_at DESC);

-- Query (efficiently uses the index):
SELECT * FROM orders
WHERE user_id = 42
  AND created_at >= NOW() - INTERVAL '30 days'
ORDER BY created_at DESC LIMIT 10;

Ringkasan

Indeks gabungan melayani penyaringan berdasarkan beberapa kolom dan menghindari langkah pengurutan.

  • Aturan awalan paling kiri
  • Kolom kesetaraan terlebih dahulu
  • INCLUDE untuk kolom yang hanya diperlukan untuk pencakupan
  • Dua indeks tunggal atau satu indeks gabungan — bergantung pada campuran kueri

Pemeriksaan Singkat

Anda memiliki indeks pada (user_id, status, created_at). Kueri mana yang CANNOT menggunakannya secara efisien?

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Indeks Komposit dan Urutan Kolom” gratis?

Ya — teks lengkap “Indeks Komposit dan Urutan Kolom” 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 “Indeks Komposit dan Urutan Kolom”?

Tentukan urutan kolom untuk indeks komposit, pahami aturan awalan-kiri, dan rancang indeks yang mencakup beberapa kueri 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 2 dari 4.

Berapa lama pelajaran “Indeks Komposit dan Urutan Kolom” 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. Indeks B-tree vs Hash vs GiST vs GIN
  2. Indeks Komposit dan Urutan Kolom
  3. Indeks Parsial dan Ekspresi
  4. Pemeliharaan Indeks dan Bloat
← Kembali ke SQL Academy