Composite Index #
Apa Itu Composite Index #
Composite index (sering juga disebut multi-column index) adalah jenis index database yang dibuat menggunakan lebih dari satu kolom dalam satu struktur index. Berbeda dengan single-column index yang hanya mengindeks satu kolom, composite index memungkinkan database mengoptimalkan query yang melibatkan kombinasi kolom.
Contoh sederhana:
- Query sering memfilter data berdasarkan
user_iddanstatus - Maka composite index bisa dibuat pada
(user_id, status)
Composite index sangat umum digunakan pada sistem backend modern, terutama untuk tabel dengan volume data besar dan query kompleks.
Tujuan Composite Index #
Tujuan utama composite index adalah:
Mengoptimalkan performa query multi-kolom Query yang menggunakan beberapa kolom pada
WHERE,JOIN, atauORDER BYdapat dieksekusi jauh lebih cepat.Mengurangi full table scan Database tidak perlu membaca seluruh tabel untuk menemukan data yang relevan.
Meningkatkan efisiensi sorting dan filtering Terutama pada query dengan kombinasi
WHERE + ORDER BY.Menjaga konsistensi performa pada skala besar Saat data bertambah, composite index membantu performa tetap stabil.
Cara Kerja Composite Index #
Secara internal, composite index disimpan dalam struktur data (umumnya B-Tree) dengan urutan kolom tertentu.
Misalnya composite index:
(user_id, created_at)
Database akan mengindeks data dengan urutan:
user_id- lalu di dalam setiap
user_id, diurutkan berdasarkancreated_at
Prinsip Leftmost Prefix #
Composite index mengikuti aturan penting yang disebut leftmost prefix rule:
Index (A, B, C) dapat digunakan untuk query yang memfilter:
AA + BA + B + C
Namun tidak optimal atau bahkan tidak digunakan untuk query yang hanya memfilter:
BCB + C
Contoh:
Index:
(user_id, status)
Query yang optimal:
WHERE user_id = 10
WHERE user_id = 10 AND status = 'ACTIVE'
Query yang tidak optimal:
WHERE status = 'ACTIVE'
Nilai Penting Composite Index #
Performa Query yang Signifikan #
Composite index bisa mengurangi waktu eksekusi query dari detik menjadi milidetik, terutama pada tabel besar.
Efisiensi Resource Database #
- Lebih sedikit disk I/O
- Lebih sedikit CPU usage
- Mengurangi lock contention akibat query lambat
Mendukung Query Nyata di Dunia Nyata #
Sebagian besar query produksi tidak hanya memfilter satu kolom, melainkan kombinasi:
- user + status
- tenant + created_at
- category + published_at
Mengurangi Kebutuhan Index Berlebihan #
Dengan desain yang tepat, satu composite index bisa menggantikan beberapa single-column index.
Best Practice Penggunaan Composite Index #
Tentukan Urutan Kolom Berdasarkan Pola Query #
Urutan kolom dalam composite index sangat krusial.
Prinsip umum:
- Kolom yang paling sering difilter → taruh di depan
- Kolom dengan selectivity tinggi → lebih baik di awal
Contoh:
- Query sering
WHERE user_id = ? AND created_at >= ? - Index yang tepat:
(user_id, created_at)
Jangan Asal Menambahkan Banyak Kolom #
Composite index yang terlalu panjang:
- Membesarkan ukuran index
- Memperlambat
INSERT,UPDATE, danDELETE
Gunakan hanya kolom yang:
- Sering muncul bersama dalam query
- Memberikan keuntungan nyata pada performa
Perhatikan Query ORDER BY
#
Composite index sangat efektif jika urutan kolom selaras dengan ORDER BY.
Contoh:
WHERE user_id = ?
ORDER BY created_at DESC
Index yang cocok:
(user_id, created_at)
Evaluasi dengan EXPLAIN / Query Plan #
Selalu validasi penggunaan composite index dengan:
EXPLAINEXPLAIN ANALYZE
Pastikan:
- Index benar-benar digunakan
- Tidak terjadi full table scan
Hindari Redundant Index #
Index berikut sering kali redundant:
- Single index
(user_id) - Composite index
(user_id, status)
Dalam banyak kasus, composite index sudah cukup untuk query berbasis user_id.
Sesuaikan dengan Karakteristik Database #
Setiap database punya behavior berbeda:
- MySQL / PostgreSQL → sangat mengandalkan B-Tree
- Beberapa engine mendukung index-only scan lebih optimal
Selalu sesuaikan desain index dengan:
- Engine database
- Versi database
- Beban workload
Penutup #
Composite index adalah alat yang sangat powerful dalam optimasi performa database, namun juga berbahaya jika digunakan tanpa pemahaman. Kunci keberhasilan composite index bukan pada jumlahnya, tetapi pada desain yang selaras dengan pola query nyata.
Dengan memahami cara kerja, nilai penting, dan best practice-nya, tim engineering dapat membangun sistem yang:
- Lebih cepat
- Lebih stabil
- Lebih scalable
Composite index bukan sekadar optimasi teknis, tetapi bagian dari database design yang matang.