Tech Talk: Optimasi Query

Melanjutkan tech talk kemarin, perkenankanlah saya menyambungnya dengan membahas optimasi lebih detail lagi, yaitu ke level database dan pemrograman. Oh iya, sebagai catatan, optimasi di sini adalah berdasarkan pengalaman dan diskusi internal, mungkin belum benar-benar optimal sehingga saya harap mendapat masukan dari pembaca. Dalam kasus ini, kami menggunakan database server MySQL dan pemrograman PHP.

Oh iya, posting ini juga dimuat di studewo.com sebagai arsip.

Menggunakan mysqli

PHP telah menyediakan function untuk koneksi ke database baik secara prosedural mau pun secara obyek (class). Namun dengan berkembangnya waktu & teknologi, beberapa function telah usang dan mulai ditinggalkan karena telah ada function yang lebih baru dan lebih baik.

Kalau dahulu kita mengenal pustaka (library) mysql_xxx, maka sekarang sudah digantikan dengan mysqli_xxx (mysql improve). Jadi lebih baik mulai menggunakan library mysqli_xxx. Lebih baik lagi jika memigrasikan aplikasi yang masih menggunakan mysql_xxx ke mysqli_xxx.

Berita baiknya, cara penggunaan librari mysqli_xxx mirip dengan mysql_xxx. Dan php tetap menyediakan 2 cara penggunaan, yaitu metode prosedural mau pun obyek (class).

Mengurangi join

Salah satu yang membuat query lambat adalah penggunaan join yang terlalu banyak. Sebenarnya MySQL terkenal sebagai engine DB yang tercepat, tapi itu jika penggunaan query-nya sederhana. Begitu query-nya kompleks, misalnya mengandung banyak join, maka MySQL pun akan terasa lambat.

Cara yang termudah adalah dengan mengurangi jumlah tabel yang di-join. Join yang baik adalah jika tabel yang di-join ukurannya kecil. Jika ada 2 atau lebih tabel yang di-join ukurannya besar (datanya besar), maka waktu yang dibutuhkan untuk pemrosesan akan sangat lama.

Jadi yang dikurangi di join adalah tabel yang ukurannya besar. Jika diinginkan data dari tabel besar itu, maka bisa dibantu PHP saat dilakukan parsing data. Gunakan query kecil untuk mendapatkan data tambahan dari tabel tersebut.

Pemecahan query ini juga bermanfaat untuk memberi kesempatan user lain melakukan query dengan segera.

Urutkan Join

Jika pun ada join, maka kita harus memperhatikan urutan join. Idealnya urutan join adalah dari tabel yang terbesar ukurannya baru ke tabel yang lebih kecil. Ini bisa juga diartikan sebagai tabel yang paling penting dulu baru ke tabel pendukung.

Force Index

Jika query memang harus kompleks, maka kita perlu memaksa MySQL untuk menggunakan index tertentu yang sesuai dengan kebutuhan, misalnya sesuai dengan basis pengurutan data yang kita pakai. Karena jika query terlalu kompleks, maka MySQL bingung memilih menggunakan index yang mana, apalagi jika tabel kita memiliki beberapa index. Untuk memaksa MySQL menggunakan index yang tepat, kita bisa memaksanya dengan perintah FORCE INDEX.

Batasi Jumlah Data

Kita perlu membatasi data yang akan dihasilkan oleh MySQL. Apalagi jika tabel yang kita proses ukurannya besar (memiliki data banyak). Caranya adalah dengan menampilkan data per halaman (pagination). Gunakan perintah LIMIT.

Gunakan mysqli_fetch_assoc

Dalam pemrograman, kata beberapa teman, sebaiknya menggunakan mysqli_fetch_assoc dari pada mysqli_fetch_array saat melakukan parsing data. Konon mysqli_fetch_assoc lebih efisien. Lagi pula cara penggunaannya sama persis dengan mysqli_fetch_array, jadi tidak perlu perubahan code besar-besaran.

Test Query

Ternyata mencoba query yang digunakan dalam program sebelum kita merilisnya sangat penting. Query yang dicoba bukan hanya ditest bisa jalan atau ada error, namun juga waktu pengerjaannya. Jika MySQL mengembalikan data lebih dari 1 detik, maka bisa jadi query kita termasuk slow query.

Cara nge-test performa query bisa menggunakan phpmyadmin atau tora (linux) atau MySQL Workbench. Setiap kali kita jalankan query, maka ada catatan berapa lama waktu yang dibutuhkan MySQL untuk memenuhi query kita.

Kesimpulan

Nah loh, membuat sistem ternyata tidak semudah membuat program dan bisa jalan. Tapi juga harus memperhatikan kemampuan sistem saat menerima beban yang semakin hari semakin besar. Dan tentu saja dengan data yang semakin besar.

Idealnya sebuah sistem tidak akan menurun kinerjanya saat diakses oleh semakin banyak user dan semakin banyak data yang tersimpan. Namun jika memang optimasi & tuning sudah tidak bisa menolong, maka kita perlu meng-upgrade hardware dan jaringan dengan teknologi yang lebih baik.

Iklan

Tentang Emanuel Setio Dewo

Tumbuh, Berkembang, Berbuah...
Pos ini dipublikasikan di Catatan, Code, Dewo, MySQL, Opini, Pekerjaan, Personal, Tech Talk, Teknologi, Tips dan tag , , , , , . Tandai permalink.

5 Balasan ke Tech Talk: Optimasi Query

  1. ahsanfile berkata:

    Keren tutorialny mas…. tapi kapan yah aku bisa implementasinya

  2. Tozca Leather berkata:

    hasil aplikasi yang simple pastinya pembuatannya sangat ribetnya mas..

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s