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

Tags: ,