Query Optimization #2: Indexing dan Pengaruhnya Terhadap Performa Query - Perwira Learning Center

1. Latar Belakang

    Dalam dunia basis data, performa serta optimasi query adalah aspek yang sangat penting untuk memastikan sebuah aplikasi berjalan lebih cepat dan responsif, salah satu teknik untuk mencapai hasil query yang efisien adalah dengan indexing

2. Alat dan Bahan

A. Perangkat Lunak

- Sistem Operasi Linux (atau yang lain)
- XAMPP atau Opt Lampp (untuk linux)
- MYSQL Database & Apache Web Server
- phpmyadmin

B. Perangkat Keras

- Laptop / PC

3. Pembahasan

3.1 Index

    Index merupakan struktur data tambahan yang menyimpan informasi tentang kolom tertentu, untuk membantu dalam mempercepat proses pencarian data dalam sebuah tabel database.

3.2 Indexing

    Indexing adalah teknik atau proses pembuatan dan pemanfaatan index guna meningkatkan kecepatan dan efisiensi pencarian data. Dengan melakukan indexing, kita dapat dengan cepat mengakses data yang diperlukan tanpa harus melakukan pencarian di seluruh tabel. 



    Sederhananya, indexing semacam daftar isi pada buku. Tanpa daftar isi, kita harus membaca dari halaman pertama sampai akhir untuk menemukan satu topik. Berikut contoh ilustrasinya, yaitu:

1. Kita buat contoh tabel terlebih dahulu


2. Tambahkan 100000 data dummy
    Ketik ini di SQL:


3. Indexing
- Tanpa indexing
    Ketika kita melakukan pencarian data, terlihat waktu yang dihabiskan untuk query tersebut adalah 0.0285 detik.
    

Dan ketika kita cek dengan EXPLAIN, query kita masih mengandalkan full table scan sehingga membuat proses keluarnya output terlihat lama (dilihat dari detiknya).

- Dengan indexing:
    Kita buat terlebih dahulu indexnya, "idx_nama" boleh diisi bebas.
    
    Selanjutnya, kita coba lakukan pencarian data. Dan hasilnya, output yang keluar hanya memerlukan waktu 0.0004 detik.


    Dan jika kita cek menggunakan EXPLAIN, salah satu perubahan signifikan yang terlihat adalah bagian kolom rows yang menampilkan hanya 1 baris (Direct Lookup). Dalam kata lain, query akan langsung lompat ke data tanpa melakukan full table scan dikarenakan menggunakan index. 


3.3 Jenis Index


    Umumnya, terdapat 3 jenis index yang nantinya dipilih oleh sistem atau DBMS, yaitu:

1. B-tree index
    Merupakan index berbentuk pohon terurut yang cepat untuk pencarian range (>, <, BETWEEN) dan sorting. Analoginya seperti sebuah pohon dimana yang paling atas adalah petunjuk besar dan bawahnya adalah data asli. Misal kita punya data keluarga: Aldi, Budi, Doni, Nadya, Zara. Maka B-tree akan mengurutkannya menjadi sebuah struktur mirip pohon.

                  [Doni]
                   /      \
    [Aldi,Budi]  [Nadya,Zara]

2. Hash Index
    Merupakan index berbasis hash table yang sangat cepat untuk pencarian nilai exact (=), tapi tidak bisa untuk range query.

3. Bitmap Index
    Merupakan index berbentuk bit (0/1) yang efisien untuk kolom dengan nilai sedikit (low cardinality), seperti gender atau status.

3.4 Jenis Pemakaian Index

1. Single-column Index (data boleh duplikat)
    Index yang dibuat pada satu kolom saja pada tabel.

    CREATE INDEX idx_kelas ON siswa(kelas);

2. Multi-column Index
    Index yang dibuat pada beberapa kolom sekaligus.
    
    CREATE INDEX idx_kelas_jurusan ON siswa(kelas, jurusan_id);

3. Unique Index (data tidak boleh duplikat)
    Index yang dibuat untuk mencegah data duplikat.
    
    CREATE UNIQUE INDEX idx_users_username ON users(username);

3.5 Cara Index Meningkatkan Performa

A. Full Table Scan
    Full table scan merupakan strategi eksekusi query yang dilakukan DBMS dengan membaca semua baris dalam tabel secara satu persatu untuk mencari data yang cocok. 

- Contoh query:

SELECT * FROM siswa WHERE nama = 'Nadya';

- Kapan terjadi?
  • Tidak ada index
  • Query tidak bisa memakai index (misalnya LIKE '%ABC%')
  • Tabel kecil / Tidak banyak data
B. Index Scan
    Index scan adalah metode akses data pada database yang menggunakan index untuk mempercepat proses pencarian data dan menghindari full table scan.

- Contoh query:

CREATE INDEX idx_nama ON siswa(nama);

- Kapan dipakai?
  • Kolom berisi nilai dengan jangkauan yang luas
  • Kolom tersebut sering digunakan dalam WHERE clause (misalnya untuk filter data).
  • Digunakan dalam JOIN antar tabel.
  • Digunakan dalam ORDER BY atau GROUP BY.
  • Merupakan kolom kunci (key) seperti primary key atau foreign key.
  • Kolom berisi banyak nilai null
  • Tabel berukuran besar dan sebagian besar query menampilkan data kurang dari 2-4%

3.6 Pengaruh Negatif Index

  • Setiap index yang dibuat pasti menguras penyimpanan 
  • Dapat memperlambat operasi tulis (INSERT, UPDATE, DELETE) karena database harus memperbarui index setiap kali data berubah
  • Menambah beban kerja DBMS karena harus memelihara dan menyinkronkan struktur index.
  • Dapat mempersulit kerja Query Optimizer dalam menentukan execution plan terbaik, terutama jika terdapat terlalu banyak index.
    Jadi, Index tidak selalu menjamin peningkatan perform, terutama apabila query jarang menggunakan kolom yang di-index.

3.7 Strategi Dasar Penggunaan Index

A. Kolom yang Perlu diindeks
    Tidak semua kolom perlu diindeks dan index hanya efektif pada kolom yang sering dipakai untuk pencarian data. Berikut kolom yang sebaiknya diindeks, yaitu:

1. Kolom di WHERE

SELECT * FROM siswa WHERE nama = 'Nadya';

2. Kolom di JOIN

SELECT * FROM siswa 
JOIN jurusan ON siswa.jurusan_id = jurusan.id;

3. Kolom di ORDER BY (mempercepat sorting)

SELECT * FROM siswa ORDER BY nama;

4. Kolom di GROUP BY (membantu grouping)

SELECT jurusan_id, COUNT(*) FROM siswa GROUP BY jurusan_id;

4. Daftar Pustaka

Santri Koding. (2026, 18 February). Belajar SQL Dasar #17: Index & Optimasi Query. Diakses dari: https://santrikoding.com/belajar-sql-dasar-17-index-optimasi-query

Inovasi Informatika Indonesia. (2016). Query SQL terasa lama? Implementasikan Index pada Database anda!. Diakses pada: https://i-3.co.id/index-pada-database/#:~:text=Baca%20Juga%20:,maka%20index%20juga%20harus%20disesuaikan.

SoalTekno.com. (2024, 23 September). Memahami Indexing Database: Kunci Performa dan Optimasi Query. Diakses dari: https://soaltekno.lokercepat.id/apa-itu-indexing-dalam-database-dan-bagaimana-cara-menggunakannya/

Planet Scale. (2023, 17 February). What are the disadvantatges of database indexes?. Diakses dari: https://planetscale.com/blog/what-are-the-disadvantages-of-database-indexes


Post a Comment

0 Comments