Lewati ke konten utama

Pengantar Pengindeksan di SQL

Dalam tutorial ini, pelajari tentang pengindeksan di database dan berbagai jenis teknik pengindeksan.
Diperbarui 28 Sep 2026  · 14 mnt Baca

Jelajahi bersama AI

ChatGPTClaudePerplexity

Sebagai data scientist, Anda sering kali harus menangani sejumlah besar data. Mengelola data (yang jumlahnya masif) sama sekali tidak mudah. Jadi, agar dapat menanganinya seefisien mungkin, Anda perlu memahami dengan jelas bagaimana data diorganisasi secara fisik sehingga Anda dapat memprosesnya dengan teknik yang tepat guna.

SQL adalah keterampilan wajib bagi setiap software engineer modern karena sebagian besar perangkat lunak bergantung pada suatu bentuk data dan terintegrasi baik dengan RDBMS (Relational Database Management System). Baik itu aplikasi web, API, maupun aplikasi internal, RDBMS selalu hadir. Dan SQL adalah bahasa untuk melakukan query pada RDBMS.

Sebagai data scientist, penting untuk mengetahui SQL dan teknik-teknik terkaitnya. Untuk bisa melakukan query pada RDBMS dan mendapatkan jawaban atas pertanyaan spesifik tentang data yang Anda tangani, SQL adalah kebutuhan minimum.

Dalam video terbarunya bersama DataCamp, David Robinson (Chief Data Scientist @ DataCamp) menunjukkan bagaimana ia menggunakan SQL dalam sebuah masalah Data Science. Silakan disimak. Alur kerjanya sangat menarik.

Hari ini Anda akan mempelajari teknik bernama Indexing yang terutama berkaitan dengan pengorganisasian data di dalam database, dan Anda akan mengimplementasikan sebagian di antaranya menggunakan SQL. Ini akan memberi Anda gambaran tentang bagaimana pengindeksan dapat digunakan untuk menyimpan informasi di dalam database dan bagaimana hal tersebut dapat menghasilkan waktu eksekusi yang lebih cepat.

Catatan: Sebelum mulai membaca tutorial ini, sangat disarankan untuk mempelajari dasar-dasar SQL jika Anda belum familiar. Kursus DataCamp Intro to SQL for Data Science adalah sumber yang sangat baik jika Anda ingin menyegarkan kembali dasar-dasar SQL.

Sekilas tentang Organisasi Rekaman dalam Berkas

Sebelum mempelajari apa pun tentang pengindeksan, sangat penting untuk memahami bagaimana data diorganisasi secara fisik di dalam berkas. Tentu saja, Anda tidak akan masuk ke semua detail, tetapi memiliki gambaran yang baik tentang organisasi akan membantu Anda memahami pengindeksan dengan sangat jelas. Mari mulai.

Organisasi rekaman/data secara umum membahas bagaimana rekaman disimpan dan secara garis besar dapat dibagi menjadi dua jenis:

  • Organisasi terurut: Semua rekaman dalam sebuah berkas diurutkan berdasarkan suatu nilai kunci pencarian. Pencarian biner umumnya digunakan untuk mencari nilai apa pun di dalam berkas terurut. Ini membuat pencarian sangat efisien karena kompleksitas waktunya berada pada waktu logaritmik. Namun penyisipan ke berkas menjadi operasi yang mahal karena Anda mungkin harus mengatur ulang seluruh berkas untuk menampung item baru.

  • Organisasi tidak terurut: Pada jenis ini, rekaman dimasukkan ke dalam berkas di mana pun ada tempat, biasanya di bagian akhir berkas. Karena pencarian linear digunakan untuk jenis ini, pencariannya tidak seefisien varian sebelumnya tetapi penyisipan bukan operasi yang mahal.

Walaupun Anda memiliki organisasi berkas yang terurut, bagaimana jika ukuran blok berkas dan ukuran setiap rekaman di dalam berkas sangat besar? Mari kita bahas di bagian berikutnya.

Kebutuhan akan Pengindeksan

Anda akan memulai bagian ini dengan mempelajari motivasi di balik penggunaan pengindeksan untuk menyimpan berkas/informasi secara efisien dan bagaimana hal itu meningkatkan operasi lain yang terkait dengan berkas/informasi tersebut.

Anggap Anda memiliki sebuah tabel (relasi) yang berisi beberapa rekaman dalam sebuah database. Rekaman tersebut dibagi lagi menjadi 1000 blok. Secara visual, organisasinya tampak seperti berikut:

table blocks

Dari organisasi di atas, jelas bahwa:

  • Pengurutan diterapkan pada kolom pertama rekaman (anggap ini adalah sistem database relasional di mana data diorganisasi dalam bentuk tabel)
  • Jumlah blok tempat total data dibagi: 1000 blok.

Ingat bahwa setiap rekaman juga berisi kolom-kolom lain, tetapi untuk organisasi ini, pengurutan diterapkan pada kolom pertama dan blok dibagi sesuai. Kini, jika Anda melakukan pencarian biner untuk mencari apa pun di dalam organisasi atau rekaman ini, total waktu yang dibutuhkan adalah $\log_{2}1000$ yang sama dengan 10 satuan waktu. Bisakah waktu pencarian ini ditingkatkan?

Tentu saja bisa.

Bayangkan ini seperti membaca buku tanpa halaman indeks. Anda membuka halaman acak (atau dalam kasus pencarian biner Anda membuka halaman tengah buku) dan membalik ke kiri dan kanan sesuai kebutuhan untuk menuju halaman yang Anda inginkan. Ini jelas memakan waktu. Bukan begitu?

Namun jika buku tersebut memiliki halaman indeks, pencarian tentu akan lebih efisien. Anda bisa langsung menuju halaman yang dimaksud hanya dengan melihat indeks. Anda dapat menerapkan pengindeksan dengan cara yang sama pada situasi di atas.

Berikut ringkasan bagaimana Anda dapat menerapkan pengindeksan di sini:

  • Memelihara penunjuk blok untuk setiap blok bersama dengan nilai-nilai terurut yang digunakan pada organisasi sebelumnya.

Ini akan menghasilkan jumlah blok yang lebih sedikit untuk menyimpan berkas data. Sekarang, untuk mencari rekaman tertentu, Anda hanya perlu mencari melalui organisasi baru yang terdiri dari lebih sedikit blok dan akhirnya Anda akan mendapatkan rekaman Anda (jika memang ada) dalam waktu yang jauh lebih singkat. Mari memvisualisasikannya. Dengan menganggap jumlah rekaman yang diindeks baru menghasilkan 8 blok, Anda akan mendapatkan organisasi seperti berikut:

less table blocks

Waktu pencarian akan berkurang drastis karena jumlah blok yang lebih sedikit. Misalnya, Anda ingin mencari rekaman 90. Dalam skema yang diindeks baru ini, pertama-tama Anda harus menemukan penunjuk bloknya yang dalam kasus ini adalah 3 dan kemudian menggunakan informasi ini Anda akan menemukan rekaman data asli hanya dalam satu kali akses.

Jadi, waktu pencarian dalam kasus ini adalah $\log_{2}8 + 1$ = 4 satuan waktu yang jauh lebih sedikit dibandingkan sebelumnya.

Contoh di atas memperkenalkan kebutuhan untuk melakukan pengindeksan. Berikut beberapa poin tentang pengindeksan yang patut dipertimbangkan:

  • Pengurutan pada rekaman data asli hanya dapat dilakukan menggunakan satu field. Lalu entri field tersebut dapat diindeks sesuai. Hanya jika Anda mencoba mencari menggunakan field itu, Anda akan mendapatkan waktu pencarian yang lebih baik. (Sangat penting)
  • Indeks juga diurutkan.
  • Rekaman indeks berisi dua field (struktur berkas indeks):
    • Kunci dari berkas asli
    • Penunjuk ke blok tempat kunci tersebut tersedia pada rekaman data asli
  • Pencarian biner digunakan untuk menelusuri indeks.
  • Untuk mengakses rekaman menggunakan entri terindeks, jumlah rata-rata akses blok yang diperlukan:
    $\log_{2}B_i + 1$ , dengan $B_i$ adalah jumlah blok pada rekaman terindeks
  • Indeks dapat dibuat pada field mana pun dari relasi (primary key, candidate key, non-key).

Sekarang, berdasarkan pengurutan rekaman data asli dan berapa banyak rekaman yang akan Anda pertahankan dalam berkas indeks, ada banyak skema pengindeksan. Pada bagian berikutnya, Anda akan mempelajari yang paling populer.

Berbagai Strategi Pengindeksan:

  • Dense Indexing: Jika entri indeks dibuat untuk setiap nilai kunci pencarian, maka itu adalah dense indexing. Perhatikan diagram berikut untuk memahaminya secara visual.

dense indexing

  • Sparse Indexing: Jika entri indeks dibuat hanya untuk sebagian rekaman, maka itu adalah sparse indexing. Berikut diagram yang menggambarkannya secara visual.

sparse indexing

Diagram di atas membuat kedua skema pengindeksan cukup mudah dipahami. Satu poin penting yang perlu dicatat adalah contoh sparse indexing di atas merupakan kombinasi dari dense dan sparse indexing. Itu karena untuk setiap nilai kunci pencarian yang unik (1, 2, dan 3) ada indeks, tetapi tidak setiap rekaman data memiliki indeks.

Sekarang Anda akan mempelajari jenis skema pengindeksan lainnya berdasarkan level rekaman. Dalam pengindeksan satu level, jumlah berkas indeks hanya satu. Namun, terkadang ukuran berkas indeks menjadi begitu besar sehingga berkas indeks itu sendiri diindeks. Dalam kasus itu, disebut pengindeksan multi-level. Mari selami lebih jauh.

Berikut gambaran strategi pengindeksan lebih lanjut yang dibuat berdasarkan pelapisan level.

Pengindeksan satu level:

  • Primary indexing
  • Clustered indexing
  • Secondary indexing

Pengindeksan multi-level:

  • B Tree
  • B+ Tree

Anda akan mempelajari semua strategi pengindeksan yang termasuk pengindeksan satu level. Di akhir tutorial ini, Anda akan mendapatkan tautan untuk mengeksplorasi skema pengindeksan multi-level jika Anda tertarik. Mari bahas Primary Indexing sekarang.

Primary indexing:

Primary index adalah berkas terurut yang rekamannya memiliki panjang tetap dengan dua field:

  • Field pertama sama dengan primary key dari berkas data.
  • Field kedua adalah penunjuk ke blok data tempat primary key tersedia. - Sumber

Indeks yang dibuat untuk rekaman pertama setiap blok disebut block anchors. Dalam primary indexing, jumlah entri indeks = jumlah blok data asli. Jumlah rata-rata akses blok menggunakan primary index adalah:

$\log_{2}B_i + 1$ , dengan $B_i$ adalah jumlah blok pada rekaman terindeks.

Lihat diagram berikut untuk memahaminya lebih jelas: primary indexing

Gambar paling kanan merujuk pada rekaman data asli yang dibagi ke beberapa blok. Perhatikan bahwa kolom yang berisi angka 1,2,3,...,9 adalah primary key. Gambar paling kiri merujuk pada entri terindeks di mana setiap entri terdiri dari:

  • Entri pertama dari setiap blok data (block anchor)
  • Entri kedua menunjukkan penunjuk blok.

Luangkan waktu sejenak dan pikirkan jenis pengindeksan apakah ini (Sparse atau Dense). Gunakan bagian comments untuk mengirimkan jawaban Anda.

Sekarang Anda akan mempelajari Clustering Indexing.

Clustering indexing:

Clustering index dibuat pada berkas data yang rekamannya diurutkan secara fisik berdasarkan field non-key yang tidak memiliki nilai unik untuk setiap rekaman. Field ini disebut clustering field yang menjadi dasar dilakukannya pengindeksan. Karena itu namanya: clustering index.

clustering indexing

Diagram selalu memudahkan pemahaman. Seperti yang Anda lihat, rekaman data asli diurutkan berdasarkan atribut non-key dan untuk setiap nilai unik dari atribut non-key, dibuat satu entri indeks. Jumlah rata-rata akses blok yang diperlukan untuk menemukan rekaman tertentu menggunakan skema ini adalah $\geq$ $\log_{2}B_i + 1$ , dengan $B_i$ adalah jumlah blok pada rekaman terindeks. Perhatikan tanda $\geq$ di sini.

Dalam clustering index, setelah menemukan blok tempat suatu kunci berada, Anda mungkin perlu menelusuri blok lain juga (yang cukup jelas dari gambar di atas).

Anda mungkin ingin memikirkan jenis pengindeksan apakah ini (Sparse atau Dense). Gunakan bagian komentar untuk mengirimkan jawaban Anda. Sekarang mari pelajari Secondary Indexing.

Secondary indexing:

Misalkan Anda memiliki tabel bernama Employee di database Anda. Tabel tersebut memiliki atribut berikut:

  • employee_id
  • employee_name
  • employee_department
  • employee_salary

employee_id adalah primary key-nya. Kini, Anda sudah membuat primary indexing pada tabel ini berdasarkan employee_id. Namun saat mengembangkan aplikasi, Anda mendapati bahwa sebagian besar query database menggunakan atribut employee_name. Dalam kasus itu, primary indexing tidak akan banyak membantu, dan merupakan praktik yang baik untuk memelihara pengindeksan terpisah untuk semua nilai milik employee_name. Bagaimanapun juga, nama karyawan tidak akan tersimpan dalam urutan terurut di dalam database. Jadi, mengindeksnya jelas akan mempercepat query yang melibatkan nama karyawan.

Ini adalah contoh klasik dari secondary indexing. Mari coba membuat ilustrasi yang sesuai untuk secondary indexing juga:

secondary indexing

Silakan unggah representasi yang lebih baik di bagian comments jika Anda punya.

Sekarang Anda akan melihat bagaimana membuat indeks di PostgreSQL. Ikuti kursus DataCamp Joining Data in PostgreSQL jika Anda ingin mempelajari dasarnya.

Membuat Indeks di PostgreSQL

Sebelum mulai membuat indeks di database PostgreSQL, Anda memerlukan data yang ada di sebuah tabel. Mari buat tabel sederhana bernama Student yang berisi rekaman berikut:

  • student_id
  • student_name
  • student_year

Anda akan menjadikan student_id sebagai primary key, dan Anda tidak akan mengizinkan nama mahasiswa dan tahun mahasiswa bernilai null.

Query untuk ini adalah sebagai berikut:

CREATE TABLE STUDENT(
   student_id TEXT PRIMARY KEY,
   student_name  TEXT NOT NULL,
   student_year  TEXT NOT NULL
);

Setelah tabel berhasil dibuat, Anda harus memasukkan beberapa data yang sesuai ke dalam tabel. Untuk kemudahan, Anda dapat menggunakan .csv ini dan mengimpornya ke Student. Anda dapat mengimpor berkas .csv yang kompatibel ke tabel PostgreSQL menggunakan query berikut:

COPY STUDENT FROM '/path/to/csv/Student.csv' WITH (FORMAT csv);

Query di atas mengasumsikan bahwa nama berkas .csv yang datanya disalin adalah Student.

Mari lihat datanya sekarang. Menjalankan select * from STUDENT; mengembalikan rekaman berikut: records

Query select seharusnya mengembalikan total 86 rekaman. Sekarang Anda siap untuk membuat indeks. Anda dapat membuat indeks kolom tunggal menggunakan sintaks berikut:

CREATE INDEX index_name
ON table_name (column_name);

Mari buat indeks pada field student_id (primary indexing).

CREATE INDEX id_index
ON STUDENT (student_id);

Indeks multikolom juga dapat dibuat:

CREATE INDEX id_index
ON STUDENT (student_id,student_name);

Anda dapat menghapus indeks menggunakan sintaks berikut:

DROP INDEX index_name;

Cukup sulit merasakan dampak pengindeksan pada tabel kecil seperti STUDENT. Namun jika tabelnya besar (anggap tabel database yang berisi rekaman serupa dari sebuah universitas besar), pengindeksan jelas akan berperan penting.

Anda berhasil!

Selamat sudah sampai di akhir. Dalam tutorial ini, Anda mempelajari tentang pengindeksan, kebutuhannya, dan berbagai skema pengindeksan. Anda juga melihat bagaimana melakukan pengindeksan sederhana di PostgreSQL.

Namun Anda belum mempelajari tentang pengindeksan multi-level dalam tutorial ini. Berikut beberapa sumber yang sangat baik jika Anda tertarik untuk mengeksplorasinya:

Namun apakah penggunaan pengindeksan selalu membantu? Ada beberapa kasus di mana penggunaan pengindeksan tidak disarankan.

indexing guidelines

Sumber

Saya harap tutorial ini membantu Anda memahami dasar-dasar pengindeksan. Beri tahu saya temuan menarik Anda di bagian comments.

Lihat Learn SQL Hub dari DataCamp.

Topik
SQL

Pelajari lebih lanjut tentang SQL

{count, plural, one {Kursus} other {Kursus}}

Manipulasi Data di SQL

{hours} jam
337.8K
Kuasai kueri SQL yang kompleks yang diperlukan untuk menjawab berbagai pertanyaan ilmu data dan menyiapkan set data yang kuat untuk analisis di PostgreSQL.
Lihat DetailRight Arrow
Mulai Kursus
Lihat SelengkapnyaRight Arrow
Terkait

{count, plural, one {blog} other {blogs}}

40 Pertanyaan Wawancara DBMS Teratas di 2026

Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
Dario Radečić's photo

Dario Radečić

15 mnt

{count, plural, one {blog} other {blogs}}

Tutorial Korelasi di R

Dapatkan pengenalan dasar-dasar korelasi di R: pelajari lebih lanjut tentang koefisien korelasi, matriks korelasi, plotting korelasi, dan sebagainya.
David Woods's photo

David Woods

13 mnt

{count, plural, one {blog} other {blogs}}

Spaghetti Plot dan Jalur Badai

Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
Hugo Bowne-Anderson's photo

Hugo Bowne-Anderson

13 mnt

{count, plural, one {blog} other {blogs}}

12 Alternatif ChatGPT Terbaik yang Bisa Anda Coba pada 2026

Artikel ini menyajikan daftar alternatif ChatGPT yang akan meningkatkan produktivitas Anda.
Javier Canales Luna's photo

Javier Canales Luna

14 mnt

Lihat SelengkapnyaLihat Selengkapnya