0Pricing
SQL Academy · Pelajaran

Indeks Parsial dan Ekspresi

Indeks hanya baris yang Anda perlukan dengan klausa WHERE, serta indeks ekspresi terhitung (lower(email), date_trunc('day', ts))

Indeks Parsial dan Ekspresi 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.

Indeks Parsial: Mengindeks Sebagian Data

Indeks parsial hanya mencakup baris yang cocok dengan klausa WHERE saat indeks dibuat. Lebih kecil, lebih cepat, dan sangat cocok untuk kueri yang paling umum:

CREATE INDEX users_active_email_idx
  ON users(email)
  WHERE deleted_at IS NULL;

Kapan Indeks Parsial Unggul

Gunakan ketika:

  • Anda selalu menyaring berdasarkan predikat yang sama (misalnya penghapusan lunak)
  • Satu nilai mendominasi kolom (misalnya 95% baris memiliki status='closed')
  • Anda menginginkan indeks kecil dan aktif yang berada di tembolok

Contoh: Sesi Aktif

Sebagian besar sesi sudah kedaluwarsa; hanya sesi aktif yang dikuerikan:

CREATE INDEX sessions_active_idx ON sessions(user_id)
  WHERE expires_at > NOW();
-- Caveat: planner can't use NOW() in the index predicate — use a fixed timestamp
-- and reindex periodically, OR use a boolean column.

Lebih Baik: Gunakan Predikat Stabil

Predikat indeks harus bersifat immutable. Ekspresi yang bergantung pada waktu (NOW()) tidak memenuhi syarat. Gunakan kolom seperti is_active sebagai gantinya:

CREATE INDEX sessions_active_idx ON sessions(user_id)
  WHERE is_active = true;

-- The query must use the same predicate to match the index:
SELECT * FROM sessions WHERE is_active = true AND user_id = 42;

Indeks Ekspresi

Indeks fungsi dari sebuah kolom:

CREATE INDEX users_email_lower_idx ON users(LOWER(email));

SELECT * FROM users WHERE LOWER(email) = LOWER('Alice@Example.com');
-- Uses the expression index.

Indeks Ekspresi yang Umum

  • LOWER(email) untuk pencarian yang tidak membedakan huruf besar-kecil
  • (price * tax_rate) untuk pengurutan berdasarkan hasil perhitungan
  • date_trunc('day', created_at) untuk laporan harian
  • (data ->> 'user_id')::BIGINT untuk ekstraksi JSONB

Ekspresi Harus IMMUTABLE

Ekspresi harus ditandai sebagai IMMUTABLE — hasilnya hanya bergantung pada input. RANDOM(), NOW(), dan CURRENT_USER tidak memenuhi syarat.

Kombinasi Parsial + Ekspresi

Keduanya dapat digabungkan:

CREATE INDEX articles_active_title_idx
  ON articles(LOWER(title))
  WHERE published_at IS NOT NULL;

Indeks Parsial Unik

Pola klasik “satu baris aktif”:

CREATE UNIQUE INDEX users_one_active_email
  ON users(email)
  WHERE deleted_at IS NULL;

-- Same email can exist many times in deleted users, but only once active.

Predikat Indeks Harus Cocok dengan Kueri

Perencana hanya menggunakan indeks parsial ketika klausa WHERE pada kueri “mengimplikasikan” predikat indeks:

-- Index:  WHERE is_active = true
-- Match:  WHERE is_active = true AND user_id = 42       ✓
-- Match:  WHERE is_active AND user_id = 42             ✓
-- No:     WHERE user_id = 42                           ✗
-- No:     WHERE is_active IS NOT FALSE                 ✗ (logically same but planner may not realise)

Jangan Berlebihan

Banyak indeks parsial yang mencakup bagian-bagian terpisah dapat memperlambat penulisan (setiap INSERT harus memperbarui semua indeks yang relevan). Gunakan secara hemat untuk kueri yang sering digunakan.

Ringkasan

Indeks parsial dan indeks ekspresi memberikan manfaat lebih besar untuk setiap bita.

  • Parsial: indeks hanya bagian data yang Anda kueri
  • Ekspresi: indeks nilai yang dihitung
  • Keduanya memerlukan predikat IMMUTABLE
  • Kueri harus menggunakan predikat yang sama agar cocok

Pemeriksaan Singkat

Anda menginginkan pencarian email yang tidak membedakan huruf besar-kecil. Indeks mana yang paling efisien?

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Indeks Parsial dan Ekspresi” gratis?

Ya — teks lengkap “Indeks Parsial dan Ekspresi” 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 Parsial dan Ekspresi”?

Indeks hanya baris yang Anda perlukan dengan klausa WHERE, serta indeks ekspresi terhitung (lower(email), date_trunc('day', ts)) 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 “Indeks Parsial dan Ekspresi” 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