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
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
-- 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
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.