Urutan Kolom pada Indeks Komposit
Aturan awalan paling kiri dan cara memilih urutan kolom yang tepat untuk beban kerja.
Urutan Kolom pada Indeks Komposit adalah pelajaran SQL Interview Prep gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar SQL Interview Prep, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus SQL Interview Prep mencakup 4 pelajaran total.
Pertanyaan tentang Indeks Gabungan
Setelah Anda dapat menjelaskan indeks satu kolom, pewawancara akan menaikkan tingkat kesulitan: 'Anda melakukan kueri berdasarkan customer_id dan order_date secara bersamaan. Bagaimana Anda akan mengindeksnya?' Jawaban yang diharapkan adalah indeks gabungan (beberapa kolom) serta alasan untuk urutan kolom tersebut.
Pelajaran ini mengajarkan aturan awalan paling kiri, satu gagasan yang menjelaskan hampir semua pertanyaan tentang indeks gabungan yang mungkin Anda dapatkan.
Apa Itu Indeks Gabungan
Indeks gabungan mengindeks beberapa kolom sebagai tupel terurut. Entri diurutkan terlebih dahulu berdasarkan kolom pertama, kemudian berdasarkan kolom kedua untuk nilai yang sama, dan seterusnya, persis seperti buku telepon yang diurutkan berdasarkan nama belakang, lalu nama depan.
Urutan sangat penting karena prioritas pengurutan mengikuti urutan kolom yang Anda deklarasikan.
CREATE INDEX idx_orders_cust_date
ON orders (customer_id, order_date);Aturan Awalan Paling Kiri
Aturan intinya: indeks gabungan pada (A, B, C) dapat digunakan untuk kueri yang menyaring berdasarkan awalan paling kiri dari kolom-kolom tersebut:
Asaja, yaA, B, yaA, B, C, yaBsaja, NOB, C, NO
Bayangkan buku telepon: Anda dapat menemukan semua orang bernama 'Smith', tetapi tidak dapat menemukan semua orang yang nama depannya 'John' secara efisien tanpa memperhatikan nama belakang, karena buku tersebut tidak diurutkan dengan cara itu.
Contoh: Kecocokan Awalan
Dengan indeks pada (customer_id, order_date), kueri-kueri berikut dapat menggunakannya karena diawali dengan customer_id:
Kueri pertama hanya menggunakan kolom paling depan. Kueri kedua menggunakan keduanya, dengan terlebih dahulu mempersempit berdasarkan customer_id, lalu mencari di antara entri milik pelanggan tersebut yang diurutkan berdasarkan tanggal.
-- Uses the index (leading column)
SELECT * FROM orders WHERE customer_id = 42;
-- Uses the index fully (both columns, in order)
SELECT * FROM orders
WHERE customer_id = 42
AND order_date >= '2026-01-01';Contoh: Awalan Tidak Cocok
Kueri ini hanya menyaring berdasarkan kolom kedua, sehingga indeks pada (customer_id, order_date) umumnya tidak dapat mengarahkan pencarian; entri-entri tersebut tidak diurutkan secara global berdasarkan order_date.
Jika penyaringan berdasarkan order_date saja merupakan pola yang umum, Anda memerlukan indeks terpisah yang diawali dengan order_date.
-- Does NOT use idx_orders_cust_date efficiently
SELECT * FROM orders
WHERE order_date >= '2026-01-01';
-- Fix: an index that leads with order_date
CREATE INDEX idx_orders_date ON orders (order_date);Kesetaraan Sebelum Rentang
Penyempurnaan tingkat lanjut: tempatkan kolom yang digunakan dengan kesetaraan (=) sebelum kolom yang digunakan dengan rentang (<, >, BETWEEN). Begitu indeks mencapai kolom rentang, indeks tidak dapat lagi menggunakan kolom setelahnya untuk mempersempit pencarian.
Untuk kueri seperti status = 'paid' AND created_at > ?, urutan yang benar adalah (status, created_at), bukan sebaliknya.
-- Query: WHERE status = 'paid' AND created_at > '2026-01-01'
-- Good: equality column first
CREATE INDEX idx_orders_status_created
ON orders (status, created_at);Memilih Kolom Awalan
Bagaimana Anda memilih kolom yang ditempatkan pertama? Pewawancara menginginkan jawaban berdasarkan beban kerja:
- Tempatkan di awal kolom yang muncul dalam kueri terbanyak, terutama sebagai penyaring kesetaraan.
- Utamakan kolom dengan selektivitas tinggi (banyak nilai berbeda) agar langkah pertama menghilangkan baris sebanyak mungkin.
- Pertimbangkan kebutuhan ORDER BY: menyesuaikan urutan indeks dapat menghindari pengurutan.
Kolom awalan adalah kolom yang melakukan pekerjaan penyaringan paling berat di seluruh kombinasi kueri nyata Anda.
Indeks Gabungan Membantu Pengurutan
Indeks gabungan juga dapat memenuhi ORDER BY pada awalan paling kiri. Karena entri diurutkan berdasarkan customer_id lalu order_date, kueri untuk pesanan milik satu pelanggan yang diurutkan berdasarkan tanggal pada dasarnya tidak memerlukan biaya pengurutan tambahan.
-- No sort step: the index already supplies this order
SELECT * FROM orders
WHERE customer_id = 42
ORDER BY order_date;Jangan Menumpuk Indeks yang Berlebihan
Kandidat sering membuat terlalu banyak indeks. Jika Anda sudah memiliki (customer_id, order_date), indeks terpisah pada (customer_id) saja biasanya berlebihan; indeks gabungan tersebut sudah mencakup kueri yang menggunakan kolom awalan.
Setiap indeks tambahan memerlukan ruang penyimpanan dan memperlambat operasi tulis, sehingga tujuannya adalah kumpulan indeks terkecil yang mencakup pola kueri Anda, bukan satu indeks untuk setiap kolom.
Membuktikannya dengan EXPLAIN
Seperti biasa, pastikan pilihan perencana. Setelah membuat indeks gabungan, jalankan EXPLAIN dan periksa apakah indeks tersebut muncul sebagai pemindaian indeks serta berapa banyak baris yang diestimasinya.
Jika kueri dengan awalan yang tidak cocok kembali ke pemindaian berurutan, itulah bukti bahwa urutan kolom tidak sesuai dengan beban kerja, dan persis itulah yang akan Anda jelaskan kepada pewawancara.
EXPLAIN
SELECT * FROM orders
WHERE customer_id = 42
AND order_date >= '2026-01-01';Cara Mengatakannya dalam Wawancara
Ringkasan singkat:
'Indeks gabungan diurutkan berdasarkan kolomnya dari kiri ke kanan, sehingga dapat melayani setiap awalan paling kiri dari kolom tersebut, tetapi tidak subset kolom belakang. Saya menempatkan kolom yang melakukan penyaringan paling banyak dan memiliki selektivitas tinggi di awal, menempatkan predikat kesetaraan sebelum predikat rentang, serta menyesuaikan ORDER BY jika memungkinkan, lalu memverifikasinya dengan EXPLAIN.'
Pemeriksaan Cepat
Terapkan aturan prefiks paling kiri.
Ringkasan: Urutan Indeks Komposit
Pokok-pokok penting:
- Indeks komposit diurutkan dari kiri ke kanan; indeks ini hanya melayani prefiks paling kiri dari kolom-kolomnya.
- Tempatkan di posisi awal kolom yang paling sering digunakan dalam kueri dan memiliki selektivitas tinggi.
- Tempatkan kolom kesetaraan sebelum kolom rentang.
- Prefiks yang cocok juga dapat memenuhi
ORDER BYtanpa pengurutan. - Hindari indeks satu kolom yang redundan dan sudah tercakup oleh indeks komposit, lalu verifikasi dengan
EXPLAIN.
Berikutnya: indeks pencakup yang sepenuhnya menghilangkan pengambilan dari heap.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Urutan Kolom pada Indeks Komposit” gratis?
Ya — teks lengkap “Urutan Kolom pada Indeks Komposit” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus SQL Interview Prep, upgrade ke CoddyKit PRO. Kursus SQL Interview Prep mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Urutan Kolom pada Indeks Komposit”?
Aturan awalan paling kiri dan cara memilih urutan kolom yang tepat untuk beban kerja. Kamu berlatih SQL Interview Prep dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai SQL Interview Prep?
Tidak diperlukan pengalaman sebelumnya. SQL Interview Prep di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “Urutan Kolom pada Indeks Komposit” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran SQL Interview Prep ini?
Ya. Setiap pelajaran SQL Interview Prep menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Indeks B-Tree dan Manfaatnya
- Urutan Kolom pada Indeks Komposit
- Indeks yang Mencakup dan Pemindaian Hanya Indeks
- Saat Indeks Merugikan: Penulisan dan Selektivitas