Lompat ke konten Lompat ke sidebar Lompat ke footer

Index dan Hashing

Dalam sistem basis data, dua teknik penting yang sering digunakan untuk meningkatkan efisiensi pencarian dan pengolahan data adalah Indexing dan Hashing. Keduanya berfungsi untuk mempercepat proses pengambilan data, tetapi dengan metode yang berbeda. Artikel ini akan membahas masing-masing teknik secara mendalam, memberikan contoh konkret, serta pustaka yang relevan untuk memperdalam pemahaman.

Index dalam Basis Data

Index dalam basis data merupakan struktur data yang dibuat untuk memudahkan dan mempercepat pencarian data di dalam tabel. Secara sederhana, indeks bekerja mirip seperti daftar isi dalam sebuah buku, memungkinkan kita untuk langsung menuju ke halaman yang diinginkan tanpa harus membaca halaman per halaman.

 
Cara Kerja Index

Dalam praktiknya, indeks menyimpan salinan sebagian dari data yang ada di tabel, biasanya dalam bentuk struktur pohon atau urutan yang terorganisir. Misalnya, dalam tabel

misalnya, dalam tabel yang memiliki kolom ID, Nama, dan Alamat, jika kita membuat indeks pada kolom ID, sistem basis data akan menyusun data berdasarkan nilai-nilai ID tersebut. Struktur indeks ini memungkinkan kita untuk mencari data pada kolom ID dengan sangat cepat, tanpa harus melakukan pencarian seluruh data pada tabel.

 
Jenis-jenis Index

Berikut adalah beberapa jenis indeks yang umum digunakan dalam basis data:
  1. Primary Index: Indeks utama yang dibuat pada kolom kunci utama (Primary Key) tabel. Setiap tabel biasanya memiliki satu indeks utama yang menjamin bahwa setiap nilai dalam kolom kunci utama adalah unik.
  2. Secondary Index: Indeks sekunder dibuat pada kolom yang bukan kunci utama tetapi sering digunakan untuk pencarian. Misalnya, dalam tabel data karyawan, kita bisa membuat indeks sekunder pada kolom Nama untuk mempercepat pencarian berdasarkan nama.
  3. Clustered Index: Indeks yang mengatur penyimpanan fisik dari baris-baris data di dalam tabel. Ketika data diurutkan secara fisik sesuai dengan kolom tertentu, maka kolom tersebut memiliki indeks clustered.
  4. Non-clustered Index: Indeks yang menyimpan pointer ke data di tabel utama, tidak mengatur penyimpanan fisik data. Ini memungkinkan pencarian cepat tanpa mengubah struktur data fisik.

Contoh Penggunaan Index

Misalkan kita memiliki tabel bernama `Mahasiswa` dengan kolom `NIM`, `Nama`, dan `Jurusan`. Untuk mempercepat pencarian mahasiswa berdasarkan `NIM`, kita dapat membuat indeks pada kolom `NIM`.


CREATE INDEX idx_nim ON Mahasiswa(NIM);


Dengan adanya indeks ini, pencarian mahasiswa dengan `NIM` tertentu akan jauh lebih cepat dibandingkan jika tidak ada indeks, terutama jika tabel `Mahasiswa` berisi ribuan data.



Hashing dalam Basis Data

Hashing adalah teknik yang digunakan untuk mempercepat pencarian dengan menggunakan fungsi hash. Fungsi hash mengubah kunci pencarian menjadi alamat penyimpanan data. Teknik ini umum digunakan dalam sistem basis data berbasis NoSQL dan sangat efektif untuk pengaksesan data dengan cepat.

 
Cara Kerja Hashing

Pada dasarnya, hashing bekerja dengan membuat nilai unik (hash) dari sebuah data. Misalnya, jika kita memiliki nilai `NIM` tertentu, kita dapat mengubah nilai ini menjadi alamat penyimpanan data melalui fungsi hash. Fungsi ini menentukan "bucket" atau tempat penyimpanan di mana data berada. Jika kita ingin mencari data tersebut, kita cukup menghitung kembali hash dari nilai kunci dan menuju ke bucket yang sesuai, tanpa harus mencari secara berurutan.

 
Jenis-jenis Hashing
  1. Static Hashing: Pada metode ini, jumlah bucket atau ruang penyimpanan yang digunakan bersifat tetap dan tidak berubah. Kelemahan metode ini adalah keterbatasan fleksibilitas jika jumlah data bertambah secara signifikan.
  2. Dynamic Hashing: Pada metode ini, jumlah bucket dapat bertambah atau berkurang sesuai kebutuhan. Metode ini memungkinkan sistem untuk menyesuaikan kapasitas penyimpanan dengan jumlah data.
 
Contoh Penggunaan Hashing

Misalkan kita ingin menyimpan data `NIM` mahasiswa dengan metode hashing. Jika `NIM` mahasiswa adalah "12345", kita bisa menerapkan fungsi hash tertentu, misalnya `hash("12345") % jumlah_bucket` untuk menentukan lokasi penyimpanan data tersebut. Saat data dicari, kita bisa langsung menghitung hash dari `NIM` yang dicari dan menuju bucket yang tepat.

Contoh sederhana hash dalam Python

def hash_function(nim):

return nim % 10

nim = 12345

bucket = hash_function(nim)

print("Data disimpan di bucket:", bucket)


Perbedaan Utama antara Indexing dan Hashing

  • Struktur: Indexing biasanya menggunakan struktur data seperti pohon (B-Tree atau B+ Tree), sedangkan hashing menggunakan fungsi hash untuk mengelompokkan data ke dalam bucket.
  • Kinerja: Indeks memungkinkan pencarian data berdasarkan rentang (range queries) seperti mencari data yang `lebih besar dari` atau `lebih kecil dari` nilai tertentu, sedangkan hashing hanya cocok untuk pencarian langsung berdasarkan nilai tertentu.
  • Fleksibilitas: Hashing cenderung lebih cepat untuk pencarian spesifik, tetapi kurang fleksibel dibandingkan indeks yang memungkinkan berbagai tipe pencarian.