Artikel ini dapat digunakan, disalin, dan disebarluaskan. Cukup cantumkan sumber asli. Jika isinya mengandung kebenaran, semoga memberi kebaikan bagi kita yang memanfaatkannya. Jika ada yang salah, mohon kiranya penulis dimaafkan. Dan sangat baik, jika kesalahan tersebut dapat diberitahukan kepada penulis.
Yanmarshus, 20 Desember 2005, yan[at]daunsalam[dot]net

SELECT dengan Temporary Table pada MySQL

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 :

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.