Jenis indeks: B-tree, hash, bitmap

From OnnoWiki
Revision as of 09:10, 13 April 2025 by Onnowpurbo (talk | contribs) (Created page with "Berikut adalah **Modul 7: Indeks dan Optimasi Kinerja Query**, dengan fokus pada **jenis-jenis indeks** seperti **B-tree**, **Hash**, dan **Bitmap**, beserta **contoh implemen...")
(diff) โ† Older revision | Latest revision (diff) | Newer revision โ†’ (diff)
Jump to navigation Jump to search

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**.

---

    1. ๐Ÿง  **Modul 7: Indeks dan Optimasi Kinerja Query**
      1. ๐ŸŽฏ **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.

---

    1. ๐Ÿ“š **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**.
      1. โšก Keuntungan:

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

      1. โš ๏ธ Kerugian:

- Membutuhkan ruang tambahan - Dapat memperlambat operasi **INSERT**, **UPDATE**, **DELETE**

---

    1. ๐ŸŒณ **7.2 Jenis-Jenis Indeks**
      1. ๐Ÿ”น 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**

        1. โœ… 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

); ```

---

      1. ๐Ÿ”น 2. **Hash Index**

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

        1. โœ… 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).

---

      1. ๐Ÿ”น 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**.

        1. ๐Ÿ”„ 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.

---

    1. ๐Ÿ› ๏ธ **7.3 Cek dan Analisis Indeks**
      1. ๐Ÿ”Ž Melihat indeks pada tabel:

```sql SHOW INDEX FROM mahasiswa; ```

      1. ๐Ÿ” Menguji kinerja query:

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

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

---

    1. ๐Ÿ“Œ **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!