Jenis indeks: B-tree, hash, bitmap
Berikut adalah **Modul 7: Indeks dan Optimasi Kinerja Query**, dengan fokus pada **jenis-jenis indeks** seperti **B-tree**, **Hash**, dan **Bitmap**, beserta **contoh implementasi di MySQL Ubuntu 24.04**.
---
- ๐ง **Modul 7: Indeks dan Optimasi Kinerja Query**
- ๐ฏ **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.
---
- ๐ **7.1 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**
---
- ๐ณ **7.2 Jenis-Jenis Indeks**
- ๐น 1. **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:
```sql CREATE TABLE mahasiswa (
nim VARCHAR(10) PRIMARY KEY, nama VARCHAR(100), prodi VARCHAR(50), INDEX (nama) -- Membuat B-tree index pada kolom nama
); ```
---
- ๐น 2. **Hash Index**
- Digunakan untuk pencarian **tepat (exact match)** seperti `=`, tapi **tidak** cocok untuk range query. - Hanya didukung oleh **engine MEMORY** di MySQL.
- โ Contoh:
```sql 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).
---
- ๐น 3. **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.
```sql 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.
---
- ๐ ๏ธ **7.3 Cek dan Analisis Indeks**
- ๐ Melihat indeks pada tabel:
```sql SHOW INDEX FROM mahasiswa; ```
- ๐ Menguji kinerja query:
```sql EXPLAIN SELECT * FROM mahasiswa WHERE nama = 'Andi'; ```
> Output akan menunjukkan apakah query menggunakan **index**, **range scan**, atau **full table scan**.
---
- ๐ **7.4 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).
---
Kalau kamu mau lanjut ke **Modul 8: View dan Stored Procedure** atau minta contoh studi kasus optimasi query real-world (misal untuk data e-commerce), tinggal bilang ya!