Composite Index

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_id dan status
  • 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:

  1. Mengoptimalkan performa query multi-kolom Query yang menggunakan beberapa kolom pada WHERE, JOIN, atau ORDER BY dapat dieksekusi jauh lebih cepat.

  2. Mengurangi full table scan Database tidak perlu membaca seluruh tabel untuk menemukan data yang relevan.

  3. Meningkatkan efisiensi sorting dan filtering Terutama pada query dengan kombinasi WHERE + ORDER BY.

  4. 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:

  1. user_id
  2. lalu di dalam setiap user_id, diurutkan berdasarkan created_at

Prinsip Leftmost Prefix #

Composite index mengikuti aturan penting yang disebut leftmost prefix rule:

Index (A, B, C) dapat digunakan untuk query yang memfilter:

  • A
  • A + B
  • A + B + C

Namun tidak optimal atau bahkan tidak digunakan untuk query yang hanya memfilter:

  • B
  • C
  • B + 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, dan DELETE

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:

  • EXPLAIN
  • EXPLAIN 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.

About | Author | Content Scope | Editorial Policy | Privacy Policy | Disclaimer | Contact