Apakah Anda pernah mengalami atau menemukan semuah website yang ketika di buka halamannya loading lama atau lemot terkadang ada pula yang sampai tidak bisa di akses? Ada banyak kemungkinan yang bisa mempengaruhi hal tersebut di antaranya performa server kurang bagus atau pengatuan database yang kurang.
Nah kali ini saya hanya akan membahas salah satu dari sebab website lambat yaitu adanya query mysql yang yang ketika mengakses database misalnya dengan query mysql di PHP terjadi respon yang cukup lama.
Normalnya sebuah query pengambilan data ke mysql harus maksimal 3 detik apabila lebih dari itu harus di cek ada yang salah di query atau database Anda. Ini biasanya terjadi pada database yang mempunyai data besar misal 1 juta atau lebih baris data.
Kenapa harus kurang dari 3 detik? bayangkan sebuah halaman website yang dikunjungi sebanyak 100 user per 5 detik, apabila halaman itu loading selama 5 detik maka akan terjadi proses pending sebanyak 100 user di server mysql sementara akses ke mysql itu terbatas kebanyakan server hosting standar bianya memiliki limit akses koneksi mysql sebanyak 8 sampai 32 koneksi.
Untuk mengatasinya coba terapkan index btree pada table databse Anda. Misal kita mempunyai table master_login_logs dengan struktur fielt :
- id_login (INT 10,PRIMARY_KEY, AUTOINCREMENT)
- id_user (INT 10, INDEX)
- ip_addr (VAR_CHAR 30)
- lokasi (VAR_CHAR 200)
- tanggal (date_time)
Sekarang kita anggap table tersebut sudah ada data sebanyak jutaan baris dan kita membuat query untuk mengambil data berdasarkan 2 fielt atau lebih pastinya mysql akan melakukan colect data lebih dahulu sebelum di tampilkan resultnya yang tentunya butuh waktu untuk di proses. Nah untuk itu kita perlu membuat colect data di awal dengan cara menambahkan index sesuai data yang kita inginkan artinya ketika kita mengambil data lagi mysql sudah tidak perlu colect item data tinggal menampilkan saja.
Untuk menambahkan index table kita harus tau dulu gimana cara kita mengambil data pada table tersebut. Misal kita mau mengambil data 30 hari terlama berdasarkan id_user dan tanggal dengan query berikut:
SELECT * FROM master_login_logs WHERE id_user = 1 AND tanggal < (NOW() - interval 30 DAY)
Yang perlu Anda perhatikan adalah fielt table yang di pakai setelah query WHERE apabila perantaranya OR cukup penambahkan single index data fielt id_user dan tanggal namun karena menggunakan AND seperti di atas makan kita harus membuat 1 index saja dengan isi 2 fielt tersebut.
Tambahkan index baru dan isi fielt cukup yang di lingkar merah gambar diatas. Setalah di save akan terlihat 1 index baru dengan isi 2 fielt.
Dengan demikan akses data query akan menjadi lebih ringan, namun membuat index yang banyak pada suatu table akan memberatkan server mysql tetapi itu tidak menjadi masalah karena yang menjadi prioritas utama adalah akses user yang nyaman.
Demikian tutorial ini semoga bisa membantu.