SQL Academy · Pelajaran

Indeks untuk Pertanyaan Biasa

Tambah indeks untuk pertanyaan yang paling kerap dijalankan: mengikut pengguna, tarikh dan kunci asing, kemudian ukur kesannya dengan EXPLAIN.

Pelajaran 3 daripada 413 langkah

Indeks untuk Pertanyaan Biasa 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.

Apakah Itu Indeks?

Indeks ialah struktur data berasingan pada cakera yang membolehkan pangkalan data mencari baris berdasarkan nilai lajur tanpa mengimbas jadual. Pelaksanaan klasiknya ialah pokok-B.

Indeks Menukar Kelajuan Tulis dengan Kelajuan Baca

Setiap indeks menjadikan INSERT/UPDATE/DELETE sedikit lebih perlahan (indeks itu juga perlu dikemas kini). Jangan tambahkan indeks yang tidak diperlukan.

Kunci Utama Mendapat Indeks Percuma

Mengisytiharkan PRIMARY KEY secara automatik mencipta indeks B-tree yang unik. Begitu juga dengan lajur UNIQUE.

Indekskan Lajur Kunci Asing

PostgreSQL NOT mengindeks secara automatik bahagian anak bagi FK. Sentiasa tambah satu indeks — tanpanya, pemadaman induk akan mengimbas semua anak:

CREATE INDEX comments_post_id_idx ON comments(post_id);
CREATE INDEX comments_author_id_idx ON comments(author_id);

Indekskan Lajur yang Digunakan dalam WHERE

Jika anda kerap menapis berdasarkan created_at, indekskan lajur itu:

CREATE INDEX posts_created_at_idx ON posts(created_at DESC);

-- Query benefits:
SELECT * FROM posts ORDER BY created_at DESC LIMIT 20;

Indeks Komposit

Untuk penapis berbilang lajur, indeks komposit boleh menjadi jauh lebih pantas berbanding dua indeks satu lajur:

CREATE INDEX posts_author_published_idx
  ON posts(author_id, published_at DESC);

-- This query uses the index for both filter and sort:
SELECT * FROM posts
WHERE author_id = 42
ORDER BY published_at DESC LIMIT 10;

Peraturan Awalan Kiri

Indeks komposit (a, b, c) boleh digunakan untuk WHERE a = ? dan WHERE a = ? AND b = ? — tetapi NOT untuk WHERE b = ? sahaja. Susunan penting.

Indeks Separa

Indekskan hanya baris yang anda kueri:

-- Only published posts:
CREATE INDEX posts_published_idx
  ON posts(published_at DESC)
  WHERE published_at IS NOT NULL;

-- Smaller index, faster lookups for the common case.

Indeks Ungkapan

Indekskan fungsi bagi sesuatu lajur:

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

-- Query that uses it:
SELECT * FROM users WHERE LOWER(email) = LOWER($1);

Jangan Berlebihan Mengindeks

Peraturan umum:

  • Indekskan PK ✓ (automatik)
  • Indekskan lajur UNIQUE ✓ (automatik)
  • Indekskan lajur FK ✓
  • Indekskan lajur yang digunakan dalam WHERE / JOIN / ORDER BY bagi kueri utama anda
  • Jangan indekskan lajur dengan pemilihan yang sangat rendah (contohnya boolean dengan pecahan 50/50)

Ukur dengan EXPLAIN

Sebelum dan selepas menambahkan indeks, jalankan EXPLAIN ANALYZE untuk mengesahkan bahawa perancang menggunakannya:

EXPLAIN ANALYZE
SELECT * FROM posts WHERE author_id = 42 ORDER BY published_at DESC LIMIT 10;

Imbas Kembali

Untuk blog kita: indekskan FK (post_id pada komen, author_id pada siaran dan komen) serta (author_id, published_at DESC) pada siaran untuk kueri "siaran terkini mengikut pengguna".

Semakan Pantas

Anda menambahkan kunci asing orders.user_id REFERENCES users(id). Apakah indeks yang patut anda cipta, jika ada?

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 untuk Pertanyaan Biasa” percuma?

Ya — teks penuh “Indeks untuk Pertanyaan Biasa” 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 untuk Pertanyaan Biasa”?

Tambah indeks untuk pertanyaan yang paling kerap dijalankan: mengikut pengguna, tarikh dan kunci asing, kemudian ukur kesannya dengan EXPLAIN. 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 untuk Pertanyaan Biasa” 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. Memodelkan Blog: Pengguna, Catatan, Komen
  2. Memilih Kunci dan Jenis
  3. Indeks untuk Pertanyaan Biasa
  4. Mengisi Pangkalan Data dengan Data Ujian
← Kembali ke SQL Academy