Composite Index di SQL: Cara Kerja dan Urutan Kolom
Blog/Tutorial SQL/Composite Index di SQL: Cara Kerja dan Urutan Kolom

Composite Index di SQL: Cara Kerja dan Urutan Kolom

BimaBima
·8 Oktober 2026·8 menit baca

Penulis

Bima

Bima

Founder & Data Professional

Bagikan

TL;DR

Composite index adalah index yang dibuat atas dua kolom atau lebih sekaligus. Urutan kolom penting karena database cuma bisa manfaatin index dari kolom paling kiri secara berurutan, yang disebut leftmost prefix rule. Index atas (kota, tanggal) mempercepat filter kota saja, tapi nggak buat filter tanggal saja.

Composite index itu index yang dibuat atas dua kolom atau lebih sekaligus. Dia nyimpen kolom-kolom itu dalam urutan tersortir bareng, jadi database bisa cari cepat waktu kamu filter kombinasi kolom tersebut.

Yang bikin composite index sering disalahpahami: urutan kolomnya penting banget. Index atas (kota, tanggal) beda perilakunya dari (tanggal, kota).

Aku jelasin cara kerjanya lewat leftmost prefix rule, kenapa urutan kolom nentuin performa, dan kapan sebaiknya dipakai.

Apa itu composite index di SQL?

Composite index adalah index yang mencakup dua kolom atau lebih dalam satu tabel. Database nyimpen gabungan kolom itu dalam struktur terurut, sehingga pencarian yang nyaring kolom-kolom tersebut jadi jauh lebih cepat dibanding scan seluruh tabel.

Kalau kamu belum familiar sama index secara umum, ada penjelasan dasarnya di glossary index SQL. Singkatnya, index itu struktur bantu yang bikin pencarian data lebih cepat.

CREATE INDEX idx_transaksi_kota_tanggal
ON transaksi (kota, tanggal);

Gimana cara kerja composite index?

Composite index nyortir data berdasarkan kolom pertama dulu, baru kolom kedua di dalam tiap kelompok kolom pertama. Mirip cara buku telepon disortir: nama belakang dulu, baru nama depan di dalam nama belakang yang sama.

Karena urutannya begitu, database cuma bisa manfaatin index dari kolom paling kiri secara berurutan. Aturan ini namanya leftmost prefix rule.

-- index atas (kota, tanggal)

-- kebantu: filter kota saja
WHERE kota = 'Jakarta'

-- kebantu: filter kota dan tanggal
WHERE kota = 'Jakarta' AND tanggal >= '2026-01-01'

-- TIDAK kebantu: filter tanggal saja
WHERE tanggal >= '2026-01-01'

Filter tanggal saja nggak kebantu karena tanggal ada di posisi kedua. Buku telepon nggak ngebantu kamu cari orang cuma dari nama depan.

Gimana urutan kolom mempengaruhi performa?

Urutan kolom nentuin query mana yang kebantu. Taruh kolom yang paling sering dipakai buat filter di posisi paling kiri. Kolom dengan kondisi kesamaan biasanya lebih baik di depan daripada kolom rentang.

IndexQuery kota sajaQuery tanggal saja
(kota, tanggal)KebantuNggak kebantu
(tanggal, kota)Nggak kebantuKebantu

Kalau query kamu lebih sering nyaring kota, taruh kota di depan. Kalau lebih sering nyaring tanggal, balik urutannya. Nggak ada urutan yang benar buat semua kasus, tergantung pola query yang paling sering jalan.

Kapan pakai composite index?

Pakai composite index kalau kamu sering nyaring atau ngurutin beberapa kolom bareng dalam satu query. Satu composite index buat kombinasi kolom itu umumnya lebih cepat dari dua index terpisah yang masing-masing cuma tau satu kolom.

Tapi jangan bikin index buat tiap kombinasi kolom. Tiap index nambah beban waktu INSERT, UPDATE, dan DELETE, karena index-nya ikut diperbarui. Index juga makan ruang penyimpanan.

Contoh kasus: query transaksi toko_berkah

Toko_berkah punya tabel transaksi 2,1 juta baris dari 15 cabang di berbagai kota. Query paling sering: ambil transaksi satu kota dalam rentang tanggal tertentu buat laporan cabang.

SELECT * FROM transaksi
WHERE kota = 'Bandung'
  AND tanggal BETWEEN '2026-09-01' AND '2026-09-30';

Tanpa index, query ini scan semua 2,1 juta baris. Setelah bikin composite index atas (kota, tanggal), database langsung loncat ke blok Bandung, terus baca rentang tanggal di dalamnya.

Di pengujianku dengan data segini, waktu query turun dari sekitar 1,8 detik jadi di bawah 50 milidetik. Kuncinya kota ditaruh di depan, karena tiap laporan selalu nyebut kota dulu.

Kesalahan umum soal composite index

  • Salah urutan kolom. Naruh kolom yang jarang difilter di depan bikin index nggak kepakai buat query utama.
  • Ngarep filter kolom kedua saja kebantu. Leftmost prefix rule bilang nggak bisa. Kalau butuh, bikin index terpisah.
  • Bikin terlalu banyak index. Tiap index nambah beban tulis. Fokus ke query yang paling sering jalan.
  • Lupa cek dengan EXPLAIN. Selalu cek rencana eksekusi biar tau index-nya beneran kepakai, bukan cuma nebak.

FAQ

Kolom mana yang ditaruh duluan?

Kolom yang paling sering difilter, dan biasanya kondisi kesamaan sebelum kondisi rentang.

Lebih baik composite atau dua index terpisah?

Kalau sering nyaring dua kolom bareng, satu composite index umumnya lebih cepat.

Composite index nglambatin nulis?

Sedikit, karena index ikut diperbarui tiap tulis. Tetap layak buat tabel yang sering dibaca.

Lanjut belajar

Ringkasnya: composite index mencakup beberapa kolom, urutan kolomnya nentuin query mana yang kebantu lewat leftmost prefix rule, dan taruh kolom yang paling sering difilter di depan.

Mau ngerti dasar index dulu sebelum yang composite? Baca cara kerja index di SQL. Buat detail teknis multicolumn index, ada di dokumentasi resmi PostgreSQL.

Pengin latihan nulis dan ngeoptimasi query sampai lancar? Coba modul SQL di NgulikSQL dengan dataset yang cukup besar buat berasa bedanya.

Coba Langsung

Mau praktek langsung? Mulai latihan SQL gratis

Latihan interaktif, langsung di browser.

Buka NgulikSQL →
Bagikan:
Bima
Ditulis oleh

Bima

Founder & Data Professional

Founder Ngulik Data. Passionate about making data analysis accessible for everyone.

Artikel terkait

Semi Join dan Anti Join di SQL: Filter Pakai Tabel Lain
Tutorial SQL
14 November 2026•8 menit baca

Semi Join dan Anti Join di SQL: Filter Pakai Tabel Lain

Semi join ngambil baris yang punya pasangan di tabel lain, anti join ngambil yang nggak punya. Keduanya filter, bukan gabung kolom. Ini cara nulisnya di SQL pakai EXISTS dan NOT EXISTS.

BimaBima
Crosstab (Pivot) di PostgreSQL: Ubah Baris Jadi Kolom
Tutorial SQL
2 November 2026•11 menit baca

Crosstab (Pivot) di PostgreSQL: Ubah Baris Jadi Kolom

Crosstab di PostgreSQL mivot data dari format panjang (baris) jadi format lebar (kolom), mirip pivot table Excel. Butuh extension tablefunc, dan ada alternatif pakai CASE atau FILTER kalau kolomnya tetap.

BimaBima
INSERT ON CONFLICT di PostgreSQL
Tutorial SQL
25 Oktober 2026•11 menit baca

INSERT ON CONFLICT di PostgreSQL

INSERT ON CONFLICT bikin PostgreSQL insert baris baru atau update yang udah ada dalam satu perintah, tanpa error gara-gara duplikat primary key.

BimaBima
Kembali ke Blog
Ngulik Data logoNgulik Data

Platform edukasi data lengkap untuk professionals Indonesia. Belajar SQL, Data Analysis, dan lebih banyak lagi dengan praktek langsung dan feedback real-time.

© 2026 Ngulik Data. Semua hak dilindungi.

TAUTAN
BantuanHargaDatasetBlogAfiliasi
LEGAL
Syarat & KetentuanKebijakan Privasi
Ngulik Data
DatasetLeaderboardBlogStore