MySQL Index, Mengapa Diperlukan?


Dalam mengelola data yang tersimpan di database, sering kita di hadapkan pada situasi dimana query yang kita bikin lemod... Salah satu sebabnya adalah struktur tabel yang kurang effisien, dimana tidak ada index yang membantu proses pencarian data... 

Tidak terkecuali di GLC Consulting, dalam mengelola puluhan ribu data recruitment, kami perlu menggunakan index dalam database MySQL yang kami gunakan. Aplikasi recruitment yang kami develop mampu bekerja dengan performance yang sangat baik dengan dukungan Index tersebut. 

Sebagai ilustrasi, kami memiliki sebuah tabel dengan nama "activity" dimana terdapat sekitar 50 ribuan record... tabel ini merupakan data kegiatan recruitment yang sehari - hari kami lakukan di GLC Consulting, sebuah query saya jalankan untuk menghitung berapa banyak meeting yang telah dilakukan oleh consultant kami... untuk itu saya filter data dimana kolom "type" sama dengan 300...

mysql> select count(*) from activity where type=300;
+----------+
| count(*) |
+----------+
|      542 |
+----------+
1 row in set (0.02 sec)
Penjelasan MySQL tentang query itu adalah sebagai berikut...

mysql> explain select count(*) from activity where type=300;
+----+-------------+----------------+------+---------------+------+---------+------+-------+-------------+
| id | select_type | table          | type | possible_keys | key  | key_len | ref  | rows  | Extra       |
+----+-------------+----------------+------+---------------+------+---------+------+-------+-------------+
|  1 | SIMPLE      | activity       | ALL  | NULL          | NULL | NULL    | NULL | 56715 | Using where |
+----+-------------+----------------+------+---------------+------+---------+------+-------+-------------+
1 row in set (0.00 sec)
pada kolom "rows" MySQL perlu melihat pada 56715 row atau semua data didalam tabel untuk melakukan perhitungan count pada query tersebut...  

Sekarang kita coba alter tabel dengan menambahkan Index pada colom type, kembali query yang sama coba kita eksekusi...

mysql> select count(*) from activity where type=300;
+----------+
| count(*) |
+----------+
|      542 |
+----------+
1 row in set (0.00 sec)
lebih cepat 0.02 detik daripada query yang sama pada tabel tanpa index pada kolom yang kami filter... penjelasan MySQL tentang query itu adalah sebagai berikut...

mysql> explain select count(*) from activity where type=300;
+----+-------------+----------------+------+---------------+-------------+---------+-------+------+--------------------------+
| id | select_type | table          | type | possible_keys | key         | key_len | ref   | rows | Extra                    |
+----+-------------+----------------+------+---------------+-------------+---------+-------+------+--------------------------+
|  1 | SIMPLE      | activity       | ref  | type_idx      | type_idx    | 5       | const | 1582 | Using where; Using index |
+----+-------------+----------------+------+---------------+-------------+---------+-------+------+--------------------------+
1 row in set (0.00 sec)
Dari penjelasan ini MySQL hanya perlu melihat 1582 row dalam tabel activity untuk melakukan perhitungan yang sama... 

Kesimpulan: Index akan mempercepat cara MySQL mencari data dalam sebuah tabel... dimana MySQL tidak perlu melihat semua row untuk memberi jawaban atas query anda...

Tentang penulis

Wisu Suntoyo

Adalah seorang professional IT yang menjadi salah satu founder GLC Consulting, berkontribusi mengembangkan teknologi sistem rekrutment yang menjadi unggulan GLC didalam industri headhunter.

Penulis bisa ditemui secara profesional di LinkedIn, , Twitter, serta Blog pribadinya

comments powered by Disqus