SQL Academy · Pelajaran

Pemindaian Hanya-Indeks dan Peta Visibilitas

Aktifkan pemindaian hanya-indeks dengan mencakup kueri dan menjaga peta visibilitas tetap mutakhir

Pelajaran 4 dari 414 langkah

Pemindaian Hanya-Indeks dan Peta Visibilitas adalah pelajaran SQL Academy gratis di CoddyKit. Ini adalah pelajaran 4 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 Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus SQL Academy mencakup 4 pelajaran total.

Apa Itu Pemindaian Hanya Indeks?

Biasanya, pencarian indeks mengembalikan ID baris (TID), lalu tabel harus dikunjungi untuk membaca baris sebenarnya. Pemindaian Hanya Indeks menjawab kueri hanya menggunakan indeks — tanpa mengunjungi heap. Jauh lebih cepat.

Syarat

Pemindaian Hanya Indeks memerlukan:

  • Semua kolom yang dipilih dengan SELECT harus ada di dalam indeks
  • Halaman baris harus ditandai "semua terlihat" dalam peta visibilitas

Peta Visibilitas

Bitmap untuk setiap halaman tabel: bit yang aktif berarti "semua baris pada halaman ini terlihat oleh semua transaksi". VACUUM memeliharanya. Tanpanya, PostgreSQL harus mengunjungi heap untuk memeriksa visibilitas.

Membuat Kueri Menjadi Hanya Indeks

Pastikan semua kolom yang diperlukan tercakup:

-- Query:
SELECT id, email FROM users WHERE id = 42;

-- Without an index on (id, email), only an Index Scan that visits the heap is possible.
-- With this:
CREATE INDEX users_id_email_idx ON users (id, email);
-- Or better:
CREATE INDEX users_id_email_idx ON users (id) INCLUDE (email);
-- The query can be index-only.

INCLUDE

Indeks yang mencakup kolom non-kunci (PG 11+). Kolom tersebut disimpan di bagian daun, tetapi tidak digunakan untuk pengurutan — tidak berdampak pada biaya penyisipan:

CREATE INDEX users_id_idx ON users(id) INCLUDE (email, full_name);

SELECT id, email, full_name FROM users WHERE id = 42;
-- Index-only scan if visibility map allows.

Mengapa Heap Masih Mungkin Dikunjungi

Setelah banyak penulisan, peta visibilitas mungkin kedaluwarsa. Jalankan VACUUM (tanpa FULL) untuk memperbaruinya.

VACUUM (VERBOSE) users;
-- "scanned X pages, X of which are visible"
-- More visible pages = more Index-Only Scans possible.

Memverifikasi Pemindaian Hanya Indeks

EXPLAIN menampilkannya:

EXPLAIN ANALYZE
SELECT id, email FROM users WHERE id = 42;
--  Index Only Scan using users_id_email_idx on users
--    Index Cond: (id = 42)
--    Heap Fetches: 0       ← key number

Arti Pengambilan Heap

"Heap Fetches: 0" — sempurna, semua data berasal dari indeks. "Heap Fetches: N" — N baris memerlukan kunjungan ke heap (bit peta visibilitas tidak aktif). Setelah pembersihan otomatis berjalan, Heap Fetches biasanya berkurang.

Kapan Menggunakan INCLUDE atau Komposit

  • Gunakan INCLUDE untuk kolom yang hanya Anda pilih dengan SELECT (bukan untuk memfilter atau mengurutkan)
  • Gunakan indeks komposit (kunci) jika Anda juga memfilter atau mengurutkan berdasarkan kolom tersebut

INCLUDE membuat indeks lebih ramping dan penulisan lebih cepat.

Pembengkakan Indeks Menghambat Pemindaian Hanya Indeks

Indeks yang membengkak memiliki lebih banyak halaman, sehingga pemindaian yang hanya menggunakan indeks pun membaca lebih banyak halaman. Jaga indeks tetap divacuum dan buat ulang indeks saat pembengkakan menjadi tinggi.

Jangan Mencakup Semuanya

Menambahkan terlalu banyak kolom ke indeks membuat penulisan lambat dan indeks menjadi sangat besar. Cakup hanya jalur pembacaan yang sering digunakan.

Tampilan Terwujud sebagai Indeks yang Mencakup

Jika Anda menginginkan kecepatan baca ekstrem untuk laporan tertentu, tampilan terwujud + indeks pada dasarnya adalah "indeks yang mencakup" dengan kolom terhitung bebas.

Ringkasan

Pemindaian Hanya Indeks = jalur pembacaan tercepat.

  • Semua kolom yang dipilih harus ada di dalam indeks
  • INCLUDE menambahkan kolom non-kunci dengan biaya rendah
  • Peta visibilitas harus menyatakan "semua terlihat" — VACUUM menjaganya tetap terbaru
  • EXPLAIN: Heap Fetches: 0 adalah tujuan

Pemeriksaan Singkat

Anda melihat Heap Fetches: 100,000 dalam EXPLAIN meskipun ada simpul Pemindaian Hanya Indeks. Apa perbaikan yang biasanya dilakukan?

Gratis untuk memulai

Belajar SQL dengan tutor AI — gratis

Tulis dan jalankan kode asli di browser kamu, dapatkan bantuan instan dari tutor AI 24/7, dan lanjutkan di mana kamu tinggalkan di web atau aplikasi.

Kursus
46
Pelajaran
183

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Pemindaian Hanya-Indeks dan Peta Visibilitas” gratis?

Ya — teks lengkap “Pemindaian Hanya-Indeks dan Peta Visibilitas” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus SQL Academy, upgrade ke CoddyKit PRO. Kursus SQL Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Pemindaian Hanya-Indeks dan Peta Visibilitas”?

Aktifkan pemindaian hanya-indeks dengan mencakup kueri dan menjaga peta visibilitas tetap mutakhir Kamu berlatih SQL Academy 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 Academy?

Tidak diperlukan pengalaman sebelumnya. SQL Academy 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 4 dari 4.

Berapa lama pelajaran “Pemindaian Hanya-Indeks dan Peta Visibilitas” 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 Academy ini?

Ya. Setiap pelajaran SQL Academy 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

  1. MVCC dan Penyebab Bloat
  2. VACUUM, autovacuum, vacuum_cost_delay
  3. ANALYZE dan pg_statistic
  4. Pemindaian Hanya-Indeks dan Peta Visibilitas
← Kembali ke SQL Academy