Index (Database)
Struktur data yang mempercepat pencarian di database — seperti index di belakang buku.
Index adalah struktur data tambahan (biasanya B-Tree atau Hash) yang database gunakan untuk mempercepat operasi SELECT, WHERE, JOIN, dan ORDER BY. Tanpa index, database harus melakukan full table scan (memeriksa setiap baris satu per satu — O(n)). Dengan index, database bisa menemukan data dalam O(log n). Tipe index: B-Tree Index (default, bagus untuk range queries — WHERE age > 18), Hash Index (bagus untuk equality — WHERE email = ‘x’), GIN Index (untuk full-text search dan array), dan Partial Index (hanya index subset data). Trade-off: setiap index memperlambat INSERT/UPDATE/DELETE karena index juga harus di-update. Jangan buat index di semua kolom — hanya kolom yang sering di-query.
Contoh Kode
-- Membuat index
CREATE INDEX idx_users_email ON users(email);
CREATE INDEX idx_posts_created ON posts(created_at DESC);
CREATE UNIQUE INDEX idx_slug ON articles(slug);
-- Composite index (multi-column)
CREATE INDEX idx_orders_user_date ON orders(user_id, created_at);
-- Check query plan
EXPLAIN ANALYZE SELECT * FROM users WHERE email = 'budi@mail.com';
-- Harus menunjukkan "Index Scan" bukan "Seq Scan"