Strategi Index yang Efektif
Membuat index bukan asal-asalan. Strategi yang tepat bisa meningkatkan performa secara drastis, sementara index yang salah justru memperlambat database.
Composite Index Order Matters
Urutan kolom dalam composite index sangat penting. Index (a, b, c) bisa digunakan untuk query pada a, a,b, atau a,b,c — tapi TIDAK untuk b saja atau c saja.
-- Index: (user_id, created_at, status)
CREATE INDEX idx_orders_composite ON orders(user_id, created_at, status);
-- ✅ Bisa menggunakan index:
WHERE user_id = 1
WHERE user_id = 1 AND created_at > '2024-01-01'
WHERE user_id = 1 AND created_at > '2024-01-01' AND status = 'paid'
-- ❌ Tidak bisa menggunakan index:
WHERE created_at > '2024-01-01' -- skip kolom pertama
WHERE status = 'paid' -- skip kolom pertama & kedua
Covering Index
Index yang mencakup semua kolom yang dibutuhkan query, sehingga database tidak perlu akses tabel sama sekali (Index Only Scan).
-- Query yang sering dijalankan:
SELECT user_id, created_at, total FROM orders WHERE user_id = 1;
-- Covering index:
CREATE INDEX idx_orders_covering ON orders(user_id, created_at, total);
-- Semua data yang dibutuhkan ada di index
Partial Index
-- Hanya index data yang relevan
CREATE INDEX idx_active_orders ON orders(user_id)
WHERE status = 'active';
-- Lebih kecil dan lebih cepat daripada full index
Anti-patterns
- Over-indexing — terlalu banyak index memperlambat write operations
- Unused indexes — index yang tidak pernah digunakan hanya membuang storage
- Low selectivity index — index pada kolom boolean tidak banyak membantu
- Wrong column order — urutan composite index tidak sesuai query pattern