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.

Sebagai ilustrasi, saya memiliki sebuah tabel dengan nama “workflow_trans” dimana terdapat sekitar 30 ribuan record. sebuah query saya jalankan untuk menghitung semua data dimana record di kolom “approve” sama dengan 400.

mysql> select count(*) from workflow_trans where approve=400;
+----------+
| count(*) |
+----------+
|      918 |
+----------+
1 row in set (0.02 sec)

Penjelasan MySQL tentang query itu adalah sebagai berikut.

mysql> explain select count(*) from workflow_trans where approve=400;
+----+-------------+----------------+------+---------------+------+---------+------+-------+-------------+
| id | select_type | table          | type | possible_keys | key  | key_len | ref  | rows  | Extra       |
+----+-------------+----------------+------+---------------+------+---------+------+-------+-------------+
|  1 | SIMPLE      | workflow_trans | ALL  | NULL          | NULL | NULL    | NULL | 33262 | Using where |
+----+-------------+----------------+------+---------------+------+---------+------+-------+-------------+
1 row in set (0.00 sec)

pada kolom “rows” MySQL perlu melihat pada 33262 row atau semua data didalam tabel untuk melakukan perhitungan count pada query tersebut.

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

mysql> select count(*) from workflow_trans where approve=400;
+----------+
| count(*) |
+----------+
|      918 |
+----------+
1 row in set (0.00 sec)

dan penjelasan MySQL tentang query itu adalah sebagai berikut.

mysql> explain select count(*) from workflow_trans where approve=400;
+----+-------------+----------------+------+---------------+-------------+---------+-------+------+--------------------------+
| id | select_type | table          | type | possible_keys | key         | key_len | ref   | rows | Extra                    |
+----+-------------+----------------+------+---------------+-------------+---------+-------+------+--------------------------+
|  1 | SIMPLE      | workflow_trans | ref  | approve_idx   | approve_idx | 5       | const | 1767 | Using where; Using index |
+----+-------------+----------------+------+---------------+-------------+---------+-------+------+--------------------------+
1 row in set (0.00 sec)

Dari penjelasan ini MySQL hanya perlu melihat 1767 row dalam tabel workflow_trans 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.