Query lambat sering kali bukan masalah server, tapi kurangnya atau salahnya penggunaan index.
Cara Kerja Index
Index adalah struktur data terpisah (biasanya B-tree) yang menyimpan pointer ke baris data. Tanpa index, database melakukan full table scan — membaca setiap baris.
Kapan Tambah Index?
Kandidat kolom yang perlu diindex:
Kolom dalam klausa WHERE yang sering dipakai
Kolom JOIN
Kolom ORDER BY pada query penting
Foreign keys
Jenis Index
-- Single column index
CREATE INDEX idx_email ON users(email);
-- Composite index CREATE INDEX idx_user_created ON posts(user_id, created_at);
-- Unique index CREATE UNIQUE INDEX idx_slug ON posts(slug);
-- Full-text index CREATE FULLTEXT INDEX idx_content ON posts(title, content);
Composite Index — Urutan Kolom Penting
Rule of thumb: kolom dengan selectivity tinggi (banyak distinct value) di depan, kecuali ada kolom equality filter.
Query Slow? Gunakan EXPLAIN
EXPLAIN SELECT * FROM posts
WHERE status = 'published'
AND created_at > '2024-01-01'
ORDER BY views DESC;
Perhatikan kolom type — hindari ALL (full scan), targetkan ref atau range.
Di Laravel
// Migration
$table->index(['status', 'published_at']);
$table->index(['user_id', 'created_at']);