Lewati ke konten utama
menjadi.dev
Chapter 25.2 Database Lanjutan

Indexing: Mempercepat Query 100x

Pahami cara kerja index dan pilih strategi yang tepat

Tujuan Pembelajaran

  • Memahami B-Tree index dan cara kerjanya
  • Bisa membuat single dan composite indexes
  • Mengerti trade-off indexing

Analogi

Diagram

      Indexing:
├── B-Tree (default) -> equality, range, ORDER BY
├── Hash -> exact match only
├── GIN -> full-text search, arrays, JSONB
└── GiST -> geometric data, ranges

Trade-off: Faster reads, slower writes, more storage
    

Index mempercepat query seperti indeks di buku — tapi butuh maintenance dan storage tambahan

Penjelasan Konsep

Bayangkan kamu mencari topik di buku tebal 1000 halaman tanpa indeks.

Database index bekerja seperti indeks buku — mempercepat pencarian dengan trade-off storage dan write performance.

B-Tree Index

Balanced Tree dengan kompleksitas O(log n).

Cocok untuk: WHERE clause (equality dan range), JOIN conditions, ORDER BY, GROUP BY.

Kapan Index Tidak Berguna

Tabel kecil (< 1000 row),

Kolom dengan cardinality rendah (gender, boolean), frequent writes (setiap insert/update/delete harus update index).

Composite Index

Index dengan multiple columns.

Urutan penting — gunakan leading column di WHERE clause.

Covering Index

Index yang mencakup semua columns yang dibutuhkan query — query bisa dijawab hanya dari index tanpa mengakses tabel.

Inti yang Perlu Dipahami

Bagian ini berfokus pada memahami B-Tree index dan cara kerjanya., bisa membuat single dan composite indexes., dan mengerti trade-off indexing. Jangan terburu-buru menghafal istilahnya. Lebih penting untuk memahami peran setiap konsep dan kapan konsep itu muncul dalam pekerjaan web development.

Saat membaca Indexing, gunakan tujuan belajar sebagai penanda arah. Kalau kamu sudah bisa menjelaskan tujuan itu dengan kata-katamu sendiri, berarti fondasinya mulai terbentuk.

Cara Membayangkannya

Index mempercepat query seperti indeks di buku — tapi butuh maintenance dan storage tambahan. Analogi ini dipakai supaya konsep teknis tidak terasa melayang. Hubungkan setiap istilah dengan perannya: siapa yang meminta, siapa yang memproses, data apa yang berpindah, dan hasil apa yang diharapkan.

Kalau analoginya sudah terasa masuk akal, barulah lihat istilah teknisnya. Cara ini membuat materi lebih mudah dipahami daripada langsung menghafal definisi.

Saat Melihat Contoh Kode

Contoh kode pada chapter ini memakai bahasa sql. Bacalah contoh kode sebagai ilustrasi alur, bukan sebagai bagian yang harus langsung dihafal. EXPLAIN ANALYZE menunjukkan actual execution time dan plan. Index-only scan adalah yang paling cepat. Partial index lebih kecil dan lebih cepat untuk subset data.

Perhatikan nama fungsi, urutan langkah, dan data yang berpindah. Biasanya tiga hal itu sudah cukup untuk memahami hubungan antara teori dan praktik.

Konteks dalam Perjalanan Belajar

Setiap konsep di platform ini dipilih karena dipakai di industri. Fokus pada pemahaman, bukan hafalan.

Kamu sudah di bagian lanjutan. Mulai pikirkan bagaimana konsep ini dipakai di dunia kerja — bukan hanya untuk belajar, tapi untuk membangun produk nyata.

Gunakan pertanyaan reflektif dan prompt AI di akhir chapter sebagai latihan aktif. Membaca saja tidak cukup — kamu perlu menjelaskan ulang dengan kata-katamu sendiri.

Contoh Kode

sql
-- Analisis query plan dengan EXPLAIN
EXPLAIN ANALYZE
SELECT p.title, u.name, c.name
FROM posts p
JOIN users u ON p.user_id = u.id
JOIN categories c ON p.category_id = c.id
WHERE c.slug = 'technology'
ORDER BY p.published_at DESC
LIMIT 10;

-- Optimasi: tambah index untuk category slug + composite index
CREATE INDEX idx_categories_slug ON categories(slug);
CREATE INDEX idx_posts_category_published ON posts(category_id, published_at DESC);

-- Partial index untuk published posts only
CREATE INDEX idx_published_posts ON posts(category_id, published_at)
WHERE published_at IS NOT NULL;

-- Expression index untuk case-insensitive search
CREATE INDEX idx_users_email_lower ON users(LOWER(email));

-- Query yang menggunakan expression index:
SELECT * FROM users WHERE LOWER(email) = LOWER('User@Example.COM');

Penjelasan Kode

EXPLAIN ANALYZE menunjukkan actual execution time dan plan. Index-only scan adalah yang paling cepat. Partial index lebih kecil dan lebih cepat untuk subset data.

Prompt AI

Jalankan EXPLAIN ANALYZE pada query paling lambat di aplikasimu. Identifikasi missing indexes dan buat.

Pertanyaan Reflektif

Index adalah solusi #1 untuk query lambat. Tapi jangan over-index — setiap index memperlambat writes dan memakan storage.