Query SELECT pada MySQL barangkali adalah query andalan server database ini. Banyak artikel yang menyebutkan bahwa salah satu keunggulan MySQL adalah kecepatannya dalam melakukan query SELECT. Saya ingin berbagi cerita berkaitan dengan hal ini.
Konon suatu ketika, saya harus mengambil data dari beberapa buah tabel. Untuk sederhananya, tabel yang terlibat dicontohkan seperti berikut :
Tabel induk ------------------------------ id nim nama alamat bulan tahun ------------------------------ Tabel iuran ------------------------------ id nim wajib bebas bulan tahun ------------------------------
Tabel induk berisi data mahasiswa, dan tabel iuran adalah tabel yang menyimpan data iuran. Misalnya ada 5.000 mahasiswa, maka dalam satu tahun masing-masing tabel tersebut berisi 60.000 record. Mungkin timbul pertanyaan, mengapa data induk mesti diduplikat juga setiap bulan ? Ini hanyalah untuk penggambaran sederhana kasus ini, jadi kita anggap seperti apa adanya keadaan di atas.
Kebutuhan pengambilan data adalah menampilkan dalam satu bulan tertentu. Misalnya akan ditampilkan data semua nim, nama, dan iuran mahasiswa untuk bulan 3 tahun 2004. Query SELECT untuk kebutuhan ini tentunya seperti berikut :
SELECT induk.nim, induk.nama, iuran.wajib, iuran.bebas FROM induk JOIN iuran ON induk.nim = iuran.nim WHERE induk.bulan = '2' AND induk.tahun = '2004' AND iuran.bulan = '2' AND iuran.tahun = '2004'
Kecepatan eksekusi query seperti ini ternyata kurang cepat. Lalu dicoba mencari cara untuk menyingkat waktu eksekusi untuk mendapatkan hasil data yang sama. Dengan memanfaatkan tabel temporary, ternyata ada peningkatan kecepatan. Caranya seperti berikut :
INSERT INTO induk_tmp (nim,nama) SELECT nim,nama FROM induk WHERE tahun = '3' AND tahun = '2004'dan
INSERT INTO iuran_tmp (nim,wajib,bebas) SELECT nim,wajib,bebas FROM iuran WHERE tahun = '3' AND tahun = '2004'
SELECT
induk_tmp.nim, induk_tmp.nama,
iuran_tmp.wajib, iuran_tmp.bebas
FROM
induk_tmp JOIN iuran_tmp
ON induk_tmp.nim = iuran_tmp.nim
Dengan hasil yang sama, ternyata proses alternatif ini, walaupun memerlukan beberapa langkah, ternyata memerlukan waktu lebih sedikit. Saya tidak memiliki data-data yang lebih detil tentang kasus ini, sehingga berbagai faktor lainnya tak bisa dianalisa dalam keadaan ini.