Lewati ke konten utama
menjadi.dev
Database

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"