Jenis indeks: B-tree, hash, bitmap

From OnnoWiki
Jump to navigation Jump to search

Tujuan Pembelajaran

Setelah mempelajari modul ini, mahasiswa diharapkan mampu:

  • Menjelaskan fungsi dan jenis-jenis indeks dalam basis data.
  • Membedakan antara indeks B-tree, hash, dan bitmap.
  • Mengimplementasikan indeks di MySQL Ubuntu 24.04 untuk mengoptimalkan kinerja query.

Apa Itu Indeks dalam Database?

Indeks adalah struktur data yang digunakan untuk mempercepat proses pencarian dan pengambilan data dalam tabel, seperti index pada buku.

Keuntungan:

  • Query menjadi lebih cepat
  • Mengurangi beban pemindaian seluruh tabel (full table scan)

Kerugian:

  • Membutuhkan ruang tambahan
  • Dapat memperlambat operasi INSERT, UPDATE, DELETE

Jenis-Jenis Indeks

B-Tree Index (Default di MySQL)

  • Struktur pohon yang menjaga data tetap terurut.
  • Cocok untuk operasi range query (`<`, `>`, `BETWEEN`, `LIKE 'abc%'`)
  • Digunakan oleh engine InnoDB dan MyISAM

Contoh:

CREATE TABLE mahasiswa (
    nim VARCHAR(10) PRIMARY KEY,
    nama VARCHAR(100),
    prodi VARCHAR(50),
    INDEX (nama) -- Membuat B-tree index pada kolom nama
);

Hash Index

  • Digunakan untuk pencarian tepat (exact match) seperti `=`, tapi tidak cocok untuk range query.
  • Hanya didukung oleh engine MEMORY di MySQL.

Contoh:

CREATE TABLE sesi (
    id INT,
    token CHAR(64),
    INDEX USING HASH (token)
) ENGINE=MEMORY;

> ⚠️ Tidak tersedia di InnoDB, hanya pada tabel MEMORY (volatile, hilang saat server restart).

Bitmap Index

  • (Tidak didukung langsung di MySQL)
  • Cocok untuk kolom dengan jumlah nilai terbatas (low cardinality), misalnya `jenis_kelamin`, `status`, dll.
  • Didukung di database seperti Oracle, PostgreSQL (dengan ekstensi), tapi tidak langsung tersedia di MySQL.

Alternatif MySQL untuk kolom bertipe biner (boolean, enum):

Gunakan B-tree index pada kolom dengan nilai terbatas.

CREATE TABLE karyawan (
    id INT PRIMARY KEY,
    nama VARCHAR(100),
    jenis_kelamin ENUM('L', 'P'),
    INDEX (jenis_kelamin)
);

> Meskipun tidak bitmap, MySQL tetap dapat mengoptimalkan filtering melalui indeks B-tree di kolom low cardinality.

Cek dan Analisis Indeks

Melihat indeks pada tabel:

SHOW INDEX FROM mahasiswa;

Menguji kinerja query:

EXPLAIN SELECT * FROM mahasiswa WHERE nama = 'Andi';

> Output akan menunjukkan apakah query menggunakan index, range scan, atau full table scan.

Kesimpulan

Jenis Indeks Struktur Dukungan MySQL Cocok untuk
B-Tree Tree ✅ Ya (default) Range, urut, exact match
Hash Hash ⚠️ Ya (Memory) Exact match saja
Bitmap Bitmap ❌ Tidak langsung Low cardinality
  • Gunakan B-tree index secara default untuk kolom yang sering dicari, diurutkan, atau difilter.
  • Gunakan EXPLAIN untuk melihat apakah query memanfaatkan indeks.
  • Hindari over-indexing karena dapat memperlambat write (insert/update).


Pranala Menarik