Covering Index di SQL untuk Query Lebih Cepat (2026)
Blog/Tutorial SQL/Covering Index di SQL untuk Query Lebih Cepat (2026)

Covering Index di SQL untuk Query Lebih Cepat (2026)

BimaBima
·10 Oktober 2026·8 menit baca

Penulis

Bima

Bima

Founder & Data Professional

Bagikan

TL;DR

Covering index di SQL adalah index yang udah nyimpen semua kolom yang dibutuhin sebuah query, jadi database bisa jawab tanpa buka tabel utama. Bikinnya dengan naruh kolom pencarian di key index dan kolom lain di klausa INCLUDE. Hasilnya query lebih cepat karena database cukup baca index, sebuah proses yang disebut index-only scan.

Covering index di SQL adalah index yang udah nyimpen semua kolom yang dibutuhin sebuah query, jadi database bisa jawab tanpa buka tabel utama.

Ini salah satu trik paling gampang buat percepat query yang lambat. Kalau semua kolom yang kamu minta udah ada di index, database nggak perlu bolak-balik ke tabel.

Artikel ini jelasin apa itu covering index, cara bikinnya pakai INCLUDE, dan kapan sebaiknya kamu pakai atau nggak.

Apa itu covering index?

Covering index adalah index yang nyimpen semua kolom yang dipakai sebuah query, baik buat nyari maupun buat nampilin hasil. Karena datanya lengkap di index, database bisa jawab query cuma dengan baca index. Langkah balik ke tabel utama yang biasanya mahal jadi hilang.

Istilah teknisnya, database ngelakuin index-only scan. Artinya, dia cukup baca index tanpa nyentuh tabel sama sekali.

Buat paham ini, kamu perlu ngerti dasar index dulu. Singkatnya, index itu struktur terurut yang bikin database cepat nemu baris tanpa ngecek satu per satu.

Gimana cara kerja covering index?

Index biasa cuma nyimpen kolom pencarian. Waktu query butuh kolom lain buat hasil, database nyatet lokasi baris di index, lalu balik ke tabel buat ambil kolom sisanya. Langkah balik ini disebut lookup, dan dia lambat kalau kejadian jutaan kali.

Covering index ngilangin langkah lookup. Semua kolom hasil udah ada di dalam index, jadi database cukup baca sekali.

Anggap kamu punya tabel penjualan dengan kolom tanggal, produk, dan jumlah. Query ini nyari penjualan di satu tanggal:

SELECT produk, jumlah
FROM penjualan
WHERE tanggal = '2026-10-01';

Kalau index cuma di kolom tanggal, database nemu barisnya lewat index, tapi masih harus balik ke tabel buat ambil produk dan jumlah. Covering index nyimpen produk dan jumlah juga, jadi nggak perlu balik.

Cara bikin covering index pakai INCLUDE

Cara paling rapi bikin covering index pakai klausa INCLUDE. Kolom pencarian ditaruh di kunci index, kolom hasil ditaruh di INCLUDE. Kolom INCLUDE ikut kesimpan tapi nggak ngurutin index, jadi kunci index tetap ramping dan cepat.

Bandingin index biasa dan covering index:

-- Index biasa: cuma kolom pencarian
CREATE INDEX idx_penjualan_tanggal
ON penjualan (tanggal);

-- Covering index: tambah kolom hasil di INCLUDE
CREATE INDEX idx_penjualan_covering
ON penjualan (tanggal)
INCLUDE (produk, jumlah);

Dengan index kedua, query tadi bisa dijawab index-only. Kolom tanggal buat nyari, produk dan jumlah buat hasil, semua ada di satu index.

INCLUDE ada di SQL Server dan PostgreSQL versi baru. Di MySQL yang nggak punya INCLUDE, kamu naruh semua kolom di composite index buat efek serupa.

Covering index vs index biasa: bedanya di mana?

Keduanya sama-sama percepat pencarian, tapi covering index nyimpen lebih banyak biar nggak perlu buka tabel. Tabel ini ngerangkum bedanya:

AspekIndex biasaCovering index
Kolom yang disimpanCuma kolom pencarianKolom pencarian + kolom hasil
Balik ke tabelPerlu (lookup)Nggak perlu (index-only)
Ukuran indexLebih kecilLebih besar
Kecepatan bacaCepatLebih cepat buat query yang cocok
Dampak ke tulisKecilLebih berat

Gampangnya, covering index lebih cepat buat baca tapi lebih mahal buat nyimpan dan nulis. Cocok buat query yang sering dijalanin dan cuma butuh sedikit kolom.

Contoh Kasus: laporan harian toko_berkah

Anggap toko_berkah punya tabel penjualan dengan 2 juta baris transaksi setahun. Tiap pagi, sistem jalanin query buat rekap produk dan jumlah per tanggal. Query ini kepanggil ratusan kali sehari.

Dengan index biasa di tanggal, database nemu baris cepat tapi masih lookup ke tabel buat tiap produk dan jumlah. Di tabel 2 juta baris, lookup ini yang bikin query berat.

Setelah dikasih covering index dengan INCLUDE (produk, jumlah), query jadi index-only. Dari yang aku lihat di kasus tabel sebesar itu, waktu query rekap harian bisa turun dari sekitar 800 milidetik ke bawah 100 milidetik. Beban ke server juga berkurang karena tabel utama nggak kesentuh.

Kalau kamu mau ngatur urutan kolom di kunci index dengan bener, baca composite index dan urutan kolom.

Kapan Nggak Perlu Covering Index

Covering index bukan solusi buat semua query. Beberapa kondisi di mana dia malah bikin rugi:

  • Query ambil banyak kolom. Kalau query butuh 10 kolom, naruh semuanya di index bikin ukurannya meledak.
  • Tabel sering di-update. Tiap INSERT dan UPDATE harus perbarui index juga. Makin gemuk index, makin lambat tulisnya.
  • Query jarang dipakai. Bikin index khusus buat query yang setahun sekali jalan itu mubazir.
  • Storage terbatas. Covering index makan ruang lebih. Di database kecil, ini kadang nggak sepadan.

Aturan praktisnya, pakai covering index buat query yang sering dijalanin, cuma minta sedikit kolom, dan di tabel yang lebih banyak dibaca daripada ditulis.

FAQ

Pertanyaan yang sering muncul soal covering index.

Penutup

Covering index bikin query cepat dengan nyimpen semua kolom yang dibutuhin, jadi database nggak perlu buka tabel utama. Kuncinya klausa INCLUDE buat naruh kolom hasil tanpa nggembungin kunci index.

Inget dua hal: covering index enak buat query baca yang sering dan ramping, tapi berat buat tabel yang banyak ditulis.

Lanjut pahami cara nyusun kunci index yang bener di composite index, dan cek detail index-only scan di dokumentasi PostgreSQL. Latihan query-nya bisa kamu coba langsung di NgulikSQL.

Coba Langsung

Mau praktek langsung? Mulai latihan SQL gratis

Latihan interaktif, langsung di browser.

Buka NgulikSQL →
Bagikan:
Bima
Ditulis oleh

Bima

Founder & Data Professional

Founder Ngulik Data. Passionate about making data analysis accessible for everyone.

Artikel terkait

Fungsi NTH_VALUE di SQL untuk Ambil Nilai ke-N (2026)
Tutorial SQL
29 Desember 2026•9 menit baca

Fungsi NTH_VALUE di SQL untuk Ambil Nilai ke-N (2026)

NTH_VALUE ngambil nilai baris ke-N dalam window, tapi frame default-nya sering bikin hasil NULL. Ini sintaksnya, cara benerin frame, plus contoh transaksi toko.

BimaBima
Running Max dan Min dengan Window Function SQL
Tutorial SQL
26 Desember 2026•11 menit baca

Running Max dan Min dengan Window Function SQL

Lacak nilai tertinggi dan terendah berjalan di SQL pakai window function MAX dan MIN OVER. Ini sintaks, frame clause, dan contoh rekor omzet toko.

BimaBima
Analisa Afinitas Produk (Cross-Sell) dengan SQL
Tutorial SQL
23 Desember 2026•12 menit baca

Analisa Afinitas Produk (Cross-Sell) dengan SQL

Produk apa yang sering dibeli bareng? Analisa afinitas produk pakai SQL self JOIN jawab itu. Ini cara hitung support, confidence, dan lift buat strategi cross-sell.

BimaBima
Kembali ke Blog
Ngulik Data logoNgulik Data

Platform edukasi data lengkap untuk professionals Indonesia. Belajar SQL, Data Analysis, dan lebih banyak lagi dengan praktek langsung dan feedback real-time.

© 2026 Ngulik Data. Semua hak dilindungi.

TAUTAN
BantuanHargaDatasetBlogAfiliasi
LEGAL
Syarat & KetentuanKebijakan Privasi
Ngulik Data
DatasetLeaderboardBlogStore