SQL Academy · Pelajaran

Indeks Separa dan Indeks Ungkapan

Indekskan hanya baris yang diperlukan menggunakan klausa WHERE, dan indekskan ungkapan terhitung (lower(email), date_trunc('day', ts)).

Pelajaran 3 daripada 413 langkah

Indeks Separa dan Indeks Ungkapan ialah pelajaran SQL Academy percuma di CoddyKit. Ini ialah pelajaran 3 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 SQL Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus SQL Academy merangkumi sejumlah 4 pelajaran.

Indeks Separa: Indekskan Sebahagian Data

Indeks separa hanya merangkumi baris yang sepadan dengan klausa WHERE semasa indeks dicipta. Lebih kecil, lebih pantas dan sangat sesuai untuk pertanyaan kes biasa:

CREATE INDEX users_active_email_idx
  ON users(email)
  WHERE deleted_at IS NULL;

Apabila Indeks Separa Berkesan

Gunakannya apabila:

  • Anda sentiasa menapis menggunakan predikat yang sama (contohnya pemadaman lembut)
  • Satu nilai mendominasi lajur (contohnya 95% baris mempunyai status='closed')
  • Anda mahukan indeks kecil yang kerap berada dalam memori cache

Contoh: Sesi Aktif

Kebanyakan sesi telah tamat tempoh; hanya sesi aktif yang ditanya:

CREATE INDEX sessions_active_idx ON sessions(user_id)
  WHERE expires_at > NOW();
-- Caveat: planner can't use NOW() in the index predicate — use a fixed timestamp
-- and reindex periodically, OR use a boolean column.

Lebih Baik: Gunakan Predikat Stabil

Predikat indeks mestilah IMMUTABLE. Ungkapan yang bergantung pada masa (NOW()) tidak layak. Sebaliknya, gunakan lajur seperti is_active:

CREATE INDEX sessions_active_idx ON sessions(user_id)
  WHERE is_active = true;

-- The query must use the same predicate to match the index:
SELECT * FROM sessions WHERE is_active = true AND user_id = 42;

Indeks Ungkapan

Indekskan fungsi bagi sesuatu lajur:

CREATE INDEX users_email_lower_idx ON users(LOWER(email));

SELECT * FROM users WHERE LOWER(email) = LOWER('Alice@Example.com');
-- Uses the expression index.

Indeks Ungkapan Biasa

  • LOWER(email) untuk carian tanpa membezakan huruf besar dan kecil
  • (price * tax_rate) untuk pengisihan terhitung
  • date_trunc('day', created_at) untuk laporan harian
  • (data ->> 'user_id')::BIGINT untuk pengekstrakan JSONB

Ungkapan Mestilah IMMUTABLE

Ungkapan mestilah ditandai sebagai IMMUTABLE — hasilnya hanya bergantung pada input. RANDOM(), NOW(), CURRENT_USER tidak layak.

Gabungan Indeks Separa dan Ungkapan

Kedua-duanya boleh digabungkan:

CREATE INDEX articles_active_title_idx
  ON articles(LOWER(title))
  WHERE published_at IS NOT NULL;

Indeks Separa Unik

Pola klasik "satu baris aktif":

CREATE UNIQUE INDEX users_one_active_email
  ON users(email)
  WHERE deleted_at IS NULL;

-- Same email can exist many times in deleted users, but only once active.

Predikat Indeks Mestilah Sepadan dengan Pertanyaan

Perancang hanya menggunakan indeks separa apabila klausa WHERE pertanyaan "membayangkan" predikat indeks:

-- Index:  WHERE is_active = true
-- Match:  WHERE is_active = true AND user_id = 42       ✓
-- Match:  WHERE is_active AND user_id = 42             ✓
-- No:     WHERE user_id = 42                           ✗
-- No:     WHERE is_active IS NOT FALSE                 ✗ (logically same but planner may not realise)

Jangan Gunakan Secara Berlebihan

Banyak indeks separa yang merangkumi subset tidak bertindih boleh memperlahankan penulisan (setiap INSERT mesti mengemas kini semua indeks yang berkaitan). Gunakannya secara berhemat untuk pertanyaan yang kerap digunakan.

Rumusan

Indeks separa dan indeks ungkapan memberikan lebih banyak manfaat bagi setiap bait.

  • Separa: indekskan hanya subset yang anda pertanyakan
  • Ungkapan: indekskan nilai terhitung
  • Kedua-duanya memerlukan predikat IMMUTABLE
  • Pertanyaan mestilah menggunakan predikat yang sama untuk sepadan

Semakan Pantas

Anda mahukan carian e-mel tanpa membezakan huruf besar dan kecil. Indeks yang manakah paling cekap?

Percuma untuk bermula

Pelajari SQL 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
46
Pelajaran
183

Soalan Lazim

Adakah pelajaran “Indeks Separa dan Indeks Ungkapan” percuma?

Ya — teks penuh “Indeks Separa dan Indeks Ungkapan” 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 SQL Academy, tingkat taraf kepada CoddyKit PRO. Kursus SQL Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Indeks Separa dan Indeks Ungkapan”?

Indekskan hanya baris yang diperlukan menggunakan klausa WHERE, dan indekskan ungkapan terhitung (lower(email), date_trunc('day', ts)). Anda berlatih SQL Academy 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 SQL Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran SQL Academy 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 3 daripada 4.

Berapa lamakah pelajaran “Indeks Separa dan Indeks Ungkapan” 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 SQL Academy ini?

Ya. Setiap pelajaran SQL Academy 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 berbanding Hash berbanding GiST berbanding GIN
  2. Indeks Komposit dan Susunan Lajur
  3. Indeks Separa dan Indeks Ungkapan
  4. Penyelenggaraan Indeks dan Pengembungan
← Kembali ke SQL Academy