Persediaan Temu Duga Pengaturcaraan · Pelajaran

Susunan Lajur Indeks Komposit

Peraturan awalan paling kiri dan cara memilih susunan lajur yang sesuai untuk beban kerja.

Pelajaran 2 daripada 413 langkah

Susunan Lajur Indeks Komposit ialah pelajaran Persediaan Temu Duga Pengaturcaraan percuma di CoddyKit. Ini ialah pelajaran 2 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Persediaan Temu Duga Pengaturcaraan, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Persediaan Temu Duga Pengaturcaraan merangkumi sejumlah 4 pelajaran.

Persoalan Indeks Komposit

Apabila anda sudah boleh menerangkan indeks satu lajur, penemuduga meningkatkan tahap kesukaran: 'Anda membuat kueri berdasarkan customer_id dan order_date bersama-sama. Bagaimanakah anda akan mengindeksnya?' Jawapan yang dijangkakan ialah indeks komposit (berbilang lajur) serta justifikasi untuk susunan lajur.

Pelajaran ini mengajar peraturan awalan paling kiri, iaitu idea utama yang menerangkan hampir setiap soalan tentang indeks komposit yang akan anda terima.

Apakah Indeks Komposit

Indeks komposit mengindeks beberapa lajur sebagai tupel bertertib. Entri diisih dahulu mengikut lajur pertama, kemudian mengikut lajur kedua bagi nilai yang sama, dan seterusnya, sama seperti direktori telefon yang diisih mengikut nama keluarga, kemudian nama pertama.

Susunan amat penting kerana keutamaan pengisihan mengikut susunan lajur yang anda isytiharkan.

CREATE INDEX idx_orders_cust_date
  ON orders (customer_id, order_date);

Peraturan Awalan Paling Kiri

Peraturan terasnya: indeks komposit pada (A, B, C) boleh digunakan untuk kueri yang menapis berdasarkan awalan paling kiri lajur-lajur tersebut:

  • A sahaja, ya
  • A, B, ya
  • A, B, C, ya
  • B sahaja, NO
  • B, C, NO

Fikirkan direktori telefon: anda boleh mencari semua orang yang bernama keluarga 'Smith', tetapi anda tidak boleh mencari semua orang yang bernama pertama 'John' tanpa mengira nama keluarga dengan cekap, kerana buku itu tidak diisih sedemikian.

Contoh Berpandu: Padanan Awalan

Dengan indeks pada (customer_id, order_date), kueri-kueri ini boleh menggunakannya kerana bermula dengan customer_id:

Kueri pertama hanya menggunakan lajur pendahulu. Kueri kedua menggunakan kedua-dua lajur, dengan mengecilkan carian berdasarkan customer_id terlebih dahulu dan kemudian mencari dalam entri tarikh yang telah diisih untuk pelanggan tersebut.

-- 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 Berpandu: Awalan Tidak Sepadan

Kueri ini menapis hanya berdasarkan lajur kedua, jadi indeks pada (customer_id, order_date) secara umumnya tidak boleh menjadi asas carian; entri-entri tersebut tidak diisih secara global mengikut order_date.

Jika penapisan berdasarkan order_date sahaja ialah corak yang lazim, anda memerlukan indeks berasingan yang bermula 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);

Kesamaan Sebelum Julat

Satu penambahbaikan pada peringkat jurutera kanan: letakkan lajur yang digunakan dengan kesamaan (=) sebelum lajur yang digunakan dengan julat (<, >, BETWEEN). Setelah indeks mencapai lajur julat, indeks tidak lagi boleh menggunakan lajur selepasnya untuk mengecilkan carian.

Untuk kueri seperti status = 'paid' AND created_at > ?, susunan yang betul ialah (status, created_at), bukannya susunan terbalik.

-- 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 Lajur Pendahulu

Bagaimanakah anda memilih lajur yang diletakkan di hadapan? Penemuduga mahukan jawapan berdasarkan beban kerja:

  • Letakkan di hadapan lajur yang muncul dalam paling banyak kueri, terutamanya sebagai penapis kesamaan.
  • Utamakan lajur dengan selektiviti tinggi (banyak nilai yang berbeza) supaya langkah pertama menyingkirkan baris yang paling banyak.
  • Pertimbangkan keperluan ORDER BY: memadankan susunan indeks boleh mengelakkan pengisihan.

Lajur pendahulu ialah lajur yang melakukan kerja penapisan paling berat merentas campuran kueri sebenar anda.

Indeks Komposit Membantu Pengisihan

Indeks komposit juga menyokong ORDER BY pada awalan paling kiri. Oleh sebab entri diisih mengikut customer_id kemudian order_date, kueri untuk pesanan seorang pelanggan yang diisih mengikut tarikh hampir tidak memerlukan kos; tiada pengisihan berasingan diperlukan.

-- No sort step: the index already supplies this order
SELECT * FROM orders
WHERE customer_id = 42
ORDER BY order_date;

Jangan Membina Indeks Berlebihan

Calon sering mencipta terlalu banyak indeks. Jika anda sudah mempunyai (customer_id, order_date), indeks berasingan pada (customer_id) sahaja biasanya berlebihan; indeks komposit itu sudah meliputi kueri pada lajur pendahulu.

Setiap indeks tambahan menggunakan ruang storan dan memperlahankan operasi tulis, jadi matlamatnya ialah set indeks yang paling kecil yang meliputi corak kueri anda, bukannya satu indeks bagi setiap lajur.

Membuktikannya dengan EXPLAIN

Seperti biasa, sahkan pilihan perancang. Selepas mencipta indeks komposit, jalankan EXPLAIN dan periksa sama ada ia muncul sebagai Index Scan serta berapa banyak baris yang dianggarkannya.

Jika kueri yang tidak sepadan dengan awalan kembali kepada imbasan berjujukan, itulah bukti bahawa susunan lajur tidak sesuai dengan beban kerja, dan perkara itulah yang akan anda jelaskan kepada penemuduga.

EXPLAIN
SELECT * FROM orders
WHERE customer_id = 42
  AND order_date >= '2026-01-01';

Cara Mengungkapkannya dalam Temu Duga

Rumusan yang padat:

'Indeks komposit diisih mengikut lajurnya dari kiri ke kanan, jadi indeks ini boleh menyokong mana-mana awalan paling kiri lajur tersebut tetapi bukan subset di hujung. Saya meletakkan di hadapan lajur yang paling banyak menapis dan mempunyai selektiviti tinggi, meletakkan predikat kesamaan sebelum predikat julat, serta memadankan ORDER BY jika boleh, kemudian mengesahkannya dengan EXPLAIN.'

Semakan Pantas

Terapkan peraturan awalan paling kiri.

Ulang Kaji: Susunan Indeks Komposit

Kesimpulan utama:

  • Indeks komposit diisih dari kiri ke kanan; indeks ini hanya melayani awalan paling kiri bagi lajurnya.
  • Mulakan dengan lajur yang paling kerap ditanya dan mempunyai selektiviti tinggi.
  • Letakkan lajur kesamaan sebelum lajur julat.
  • Awalan yang sepadan juga boleh memenuhi ORDER BY tanpa pengisihan.
  • Elakkan indeks satu lajur yang berlebihan dan sudah diliputi oleh indeks komposit, kemudian sahkan dengan EXPLAIN.

Seterusnya: indeks liputan yang menghapuskan pengambilan timbunan sepenuhnya.

Percuma untuk bermula

Pelajari Persediaan Temu Duga Pengaturcaraan dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
90
Pelajaran
360

Soalan Lazim

Adakah pelajaran “Susunan Lajur Indeks Komposit” percuma?

Ya — teks penuh “Susunan Lajur Indeks Komposit” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Persediaan Temu Duga Pengaturcaraan, tingkat taraf kepada CoddyKit PRO. Kursus Persediaan Temu Duga Pengaturcaraan merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Susunan Lajur Indeks Komposit”?

Peraturan awalan paling kiri dan cara memilih susunan lajur yang sesuai untuk beban kerja. Anda berlatih Persediaan Temu Duga Pengaturcaraan menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Persediaan Temu Duga Pengaturcaraan?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Persediaan Temu Duga Pengaturcaraan di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 2 daripada 4.

Berapa lamakah pelajaran “Susunan Lajur Indeks Komposit” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Persediaan Temu Duga Pengaturcaraan ini?

Ya. Setiap pelajaran Persediaan Temu Duga Pengaturcaraan menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. Indeks B-Tree dan Cara Indeks Membantu
  2. Susunan Lajur Indeks Komposit
  3. Indeks Meliputi dan Imbasan Indeks Sahaja
  4. Apabila Indeks Memudaratkan: Penulisan dan Kepilihan
← Kembali ke Persediaan Temu Duga Pengaturcaraan