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.
-- 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?
- Kolom yang sering ada di WHERE clause
- Kolom yang sering digunakan untuk JOIN
- Kolom yang sering digunakan untuk ORDER BY
- Kolom dengan high cardinality (banyak nilai unik)
Trade-off Index
- Pro: Mempercepat SELECT / read queries
- Con: Memperlambat INSERT, UPDATE, DELETE (index harus di-update)
- Con: Memakan storage tambahan
⚠️ 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.