Digital Transformation
Database Index (Indeks Basis Data)
TL;DR: Database index adalah struktur data yang mempercepat pencarian baris di sebuah tabel tanpa harus memindai seluruh isinya. Manfaatnya besar untuk operasi baca, tapi setiap index menambah biaya saat menulis data dan memakan ruang penyimpanan. Aturannya: indeks kolom yang sering dipakai untuk filter atau join, bukan semua kolom.
Apa itu Database Index?
Tanpa index, mencari satu baris di tabel berisi sejuta data berarti database membaca baris satu per satu sampai ketemu. Ini disebut full table scan, dan lambat. Index bekerja seperti indeks di belakang buku: alih-alih membaca tiap halaman, database melompat langsung ke lokasi yang relevan.
Index biasanya dibuat pada kolom yang sering muncul di klausa pencarian, seperti kolom email saat login atau kolom slug saat memuat sebuah halaman. Tanpa penanganan yang benar, query yang lambat bisa menjadi sumber technical debt yang menumpuk seiring data bertambah.
Kapan Memakai Index
| Cocok diindeks | Hati-hati |
|---|---|
| Kolom untuk filter (WHERE) | Tabel kecil (overhead tidak sepadan) |
| Kolom untuk join | Kolom yang sering di-update |
| Kolom untuk pengurutan (ORDER BY) | Terlalu banyak index di satu tabel |
Index yang tepat sering menjadi solusi paling efektif untuk masalah N+1 query dan koneksi database yang menumpuk.
Kenapa Penting?
Untuk website bisnis yang datanya tumbuh, index adalah pembeda antara halaman yang dimuat dalam milidetik dan yang terasa berat. Dalam beberapa proyek dengan tabel artikel dan glosarium yang terus bertambah, menambahkan index pada kolom slug dan status membuat query daftar konten tetap ringan meski jumlah baris naik. Panduan praktis pemilihan index tersedia di dokumentasi indexing PostgreSQL.
Pertanyaan Umum
Apakah menambah index selalu mempercepat aplikasi?
Tidak. Index mempercepat baca tapi memperlambat tulis, karena setiap INSERT atau UPDATE harus memperbarui index juga. Index yang tidak terpakai hanya membuang ruang dan menambah beban.
Berapa banyak index yang ideal per tabel?
Tidak ada angka pasti. Mulai dari kolom yang benar-benar sering dipakai untuk filter dan join, lalu evaluasi dengan melihat query yang lambat, bukan menebak.