Cara menggunakan indexing in mysql example
Semua software developer pasti pernah menggunakan salah satu fitur di database bernama “index”. Belum pernah mencoba?? Hmm,, paling tidak pernah mendengarnya. Belum juga pernah dengar??? Ya paling tidak sekarang sudah dengar dari paragraf pertama artikel ini hehe. Show Pendahuluan TableTable di RDBMS berfungsi untuk menyimpan kumpulan data (dataset) dengan jenis & skema yang sama. Seperti gambar di bawah, ini merupakan contoh table dengan nama QuerySedangkan query adalah metode pengambilan data dari satu atau lebih table. Di RDBMS, kita mengenal SQL (Structured Query Language) sebagai “bahasa” yang terstruktur untuk melakukan query. Perhatikan SQL statement di bawah ini : Select * From m_customers Where lastname = 'Dare' Apa yang sebenarnya terjadi jika SQL statement di atas dijalankan? Ilustrasi proses query pada table m_customersSecara sederhana, ketika SQL statement di atas dijalankan, maka RDBMS akan melakukan eksplorasi seluruh data di table Problem Problem #1 : Data SizeIlustrasi grafik response time v.s data volumeDengan data yang relatif kecil proses query terlihat sangat cepat. Tapi, dengan metode sederhana diatas, apakah proses query akan memerlukan waktu (query time) yang sama jika jumlah baris yang perlu dieksplor menjadi berkali — (ratusan bahkan juataan)-kali lipat ? Tentu tidak. Query time (response time) akan berbanding lurus dengan besar data.
Problem #2 : Data is unsortedPada dasarnya, data yang disimpan pada database adalah tidak berurutan (unsorted). Ilustrasi di bawah akan menjelaskan bagaimana proses pencarian data menjadi tidak efektif jika data tidak berurutan :
Dataset-1 : Unsorted 2,1,3,4,1,5,1,7,9,8,4,6 Dataset-2 : Sorted 1,1,1,2,3,4,4,5,6,7,8,9 Pada dataset-1 kita membutuhkan 12 langkah untuk mencari bilangan 5 (lima). Pencarian harus dilakukan dari awal sampai akhir untuk memastikan tidak ada lagi angka 5 yang tersisa (meskipun angka 5 hanya ada satu dan posisinya berada di tengah-tengah dataset). Sedangkan pada dataset-2, hanya dibutuhkan 9 langkah pencarian. Berawal dari angka 1 dan berhenti di angka 6.
Problem 3: Disk I/OData MYSQL tersimpan di file fisik pada harddisk komputer.Seluruh data pada database tersimpan di harddisk. Gambar berikut menunjukkan bagaimana data pada database MySQL tersimpan. Seperti yang kita ketahui, bahwa salah satu cost pada komputasi yang paling besar adalah disk I/O (lihat gambar di bawah). Proses menulis / membaca sebuah file di harddisk membutuhkan waktu & resource yang besar. Ilustrasi perbandingan cost komputasi. Dari ke tiga masalah di atas, kita bisa menyimpulkan bahwa proses query sederhana di atas akan menjadi sangat tidak efektif jika problem-problem di atas tidak bisa diselesaikan dengan cara yang lebih optimal. Solusi : Index RDBMS sudah memiliki built-in solution untuk problem di atas, yaitu fitur Index. Apa itu Index?Buku yellowpagesMasih ingat buku kuning besar “Yellowpages” jika kita berlangganan telpon rumah? Atau pernah buka kamus bahasa? Yap, kita tidak perlu susah-susah menelusuri kata per kata di seluruh buku untuk mencari sebuah konten. Cukup telusuri “tanda” yang disediakan di pojok / samping halaman, kita akan diarahkan ke halaman yang konten-nya dimulai dengan huruf atau kata sesuai “tanda” tersebut. Begitulah penjelasan sederhana bagaimana index bekerja. Database IndexPada database, index merupakan sebuah struktur data yang berisi kumpulan keys beserta referensinya ke actual data di table. Tujuannya untuk mempercepat proses penentuan lokasi data tanpa melakukan pencarian secara penuh ke seluruh data (full scan). BenefitFitur ini bisa menjawab 3 problem yang disampaikan sebelumnya dengan benefit-benefit berikut :
Jumlah data pada index jauh lebih kecil daripada data aslinya (tergantung kondisi datanya). Dan data-data ini juga tersimpan secara berurutan dalam bentuk struktur apapun (bisa linear list, tree, dsb). Tentu ini menjawab problem #1 & problem #2. Dengan index, pencarian dimulai dengan menelusuri data pada index (yang jauh lebih kecil & terurut), kemudian index akan memberikan referensi ke posisi data yang asli. Dari posisi tersebut, pencarian pada dataset asli akan menjadi lebih singkat. Ilustrasi index pada database | Source : Wikipedia2. (Mostly) Stored in Memory (RAM) Dengan ukuran dataset yang jauh lebih kecil, index besar kemungkinan dapat disimpan di RAM, dimana cost untuk baca/tulis pada RAM jauh lebih kecil daripada pada Harddisk. Sehingga tidak bisa dipungkiri proses pencarian keys pada index sangatlah cepat. Eksperimen Pada section ini, saya melakukan eksperimen kecil untuk menunjukkan performa query pada table dengan index dan tanpa index. DatasetData Size : 2.904.824 records. Skema table seperti gambar dibawah ini : Spesifikasi Komputer & Software
IndexesSaya membuat 3 tables dengan skema & data yang sama, tetapi memiliki index yang berbeda :
Index SizeGambar di atas menunjukkan besar data asli & index di setiap table. Informasi di atas dapat dihasilkan dengan query berikut : SELECT table_name AS ‘Table’, Eksperimen #1Pada ekseperimen ini saya menjalankan sebuah query sederhana dengan where statement pada kolom 2,1,3,4,1,5,1,7,9,8,4,6 1. Seperti yang terlihat pada gambar di bawah, table student_index_gender yang memiliki index pada kolom 2,1,3,4,1,5,1,7,9,8,4,6 1 memiliki query time yang jauh lebih cepat.Eksperimen #2Pada ekseperimen ini saya menjalankan sebuah query sederhana dengan where statement pada kolom 2,1,3,4,1,5,1,7,9,8,4,6 2 yang memiliki index pada kolom 2,1,3,4,1,5,1,7,9,8,4,6 4&lastname memiliki query time yang jauh lebih cepat dari table lainnya.KesimpulanFitur index sangat membantu dalam mengoptimalkan proses query, terutama dengan data yang besar. Satu-satunya additional cost pada penggunaan fitur index adalah bertambahnya ukuran data secara total, karena index memiliki ukuran data tersendiri , meskipun relatif jauh lebih kecil daripada data asli. Semoga artikel ini bermanfaat bagi kita dalam memahami bagaimana index pada database bekerja. Silahkan sampaikan pendapatmu di kolom komentar jika ada saran/kritik maupun tambahan informasi. Terimakasih.
|