Ketika kita dihadapkan dengan perintah query sederhana, barangkali masalah optimasi maupun time complexity bukanlah menjadi masalah utama. Namun apabila kita harus melakukan query di dalam sebuah loop yang nested, maka hal ini menjadi sangat penting, karena apabila kita tidak melakukan optimasi, query yang dijalankan akan lambat dan akhirnya akan menjadi beban sendiri buat server. Taruhlah sebuah SQL Query sebagai berikut:
SELECT * FROM `A` INNER JOIN B ON (A.id=B.id AND A.tanggal=B.tanggal) WHERE A.id=’ABCDE’ AND A.tanggal>=CURDATE()
Perintah JOIN yang dilakukan di dalam looping yang nested tentunya akan sangat berpengaruh terhadap kinerja web server, artinya query yang dilakukan menjadi lebih lambat dari biasanya dan bahkan dalam beberapa kasus, bisa sampai berhenti.
Kita dapat melakukan sedikit modifikasi terhadap file konfigurasi MySQL yaitu my.cnf yang biasanya disimpan di /etc/my.cnf
Berikut adalah contoh perintah2 untuk konfigurasi MySQL:
[mysqld]
innodb_file_per_table=1
open_files_limit=12306
innodb_buffer_pool_size=122683392
log = /tmp/mysql.log
bind-address=xxx.xxx.xxx.xxx
server-id=1
log_bin=”/var/log/mysql/mysql-bin.log”
log_error=”/var/log/mysql/mysql-bin.err”
binlog_do_db=mandirat_db
binlog_do_db=mandirat_db2
binlog_do_db=mandirat_db3
max_connections = 300
key_buffer = 32M
myisam_sort_buffer_size = 32M
join_buffer_size = 1M
read_buffer_size = 1M
sort_buffer_size = 2M
table_cache = 4000
thread_cache_size = 286
interactive_timeout = 25
wait_timeout = 7000
connect_timeout = 10
max_allowed_packet=268435456
max_connect_errors = 10
query_cache_limit = 2M
query_cache_size = 12M
Jangan lupa untuk direstart service MySQL nya setelah file my.cnf ini disimpan
Oleh: Wahyu Kurniawan