Index & Performa — Database

Apa itu Index? Index adalah struktur data yang mempercepat pencarian data di tabel, mirip seperti indeks di belakang buku. Tanpa index, database harus membaca s

Apa itu Index?

Index adalah struktur data yang mempercepat pencarian data di tabel, mirip seperti indeks di belakang buku. Tanpa index, database harus membaca seluruh tabel (full table scan).

Cara Kerja Index

Index biasanya menggunakan struktur B-Tree yang memungkinkan pencarian dalam waktu O(log n) dibanding O(n) untuk full scan.

B-Tree dengan node root bernilai 50, 2 node internal 25/75, dan 4 leaf node berisi range nilai.5025751-12ptr → rows13-49ptr → rows51-74ptr → rows76-99ptr → rowsCari "60": root 50 → kanan → 75 → kiri → leaf 51-74 (3 hop, O(log n))
B-Tree: lookup menempuh kedalaman log n. 1 miliar baris ≈ 30 hop, bukan 1 miliar.
-- Tanpa index: full table scan (lambat untuk tabel besar)
SELECT * FROM users WHERE email = '[email protected]';
-- Database harus cek SETIAP baris

-- Dengan index: langsung lompat ke data yang tepat
CREATE INDEX idx_users_email ON users(email);
-- Sekarang query di atas jauh lebih cepat

Jenis Index

-- 1. Single-column index
CREATE INDEX idx_users_name ON users(name);

-- 2. Composite index (multi-kolom)
CREATE INDEX idx_orders_user_date ON orders(user_id, created_at);

-- 3. Unique index (memastikan nilai unik)
CREATE UNIQUE INDEX idx_users_email ON users(email);

-- 4. Partial index (hanya data tertentu)
CREATE INDEX idx_active_users ON users(email)
WHERE active = true;

Kapan Membuat Index?

Trade-off Index

⚠️ Skenario produksi nyata: tim kamu melakukan bulk import 5 juta baris dari CSV. Tabel punya 8 index. Import yang seharusnya 10 menit jadi 4 jam karena setiap INSERT harus update 8 B-tree. Solusi praktis: DROP index sebelum bulk insert, lalu CREATE ulang setelahnya — CREATE INDEX bulk jauh lebih cepat daripada update per-row jutaan kali. Jangan lupa re-validasi data lewat EXPLAIN setelah recreate.

Yang akan kamu pelajari