Optimasi Penggunaan Kueri SQL di PHP
Menjalankan kueri SQL ke basis data merupakan operasi yang sangat lambat. Oleh karena itu, kita perlu berusaha meminimalkan jumlah kueri ke basis data.
Kesalahan paling umum adalah mengeksekusi banyak kueri SQL dalam loop, padahal ada kueri alternatif yang memungkinkan untuk melakukan hal yang diinginkan dengan satu perintah.
Mari kita lihat contohnya.
Misalkan kita diberikan array berisi id entri
dalam basis data dan kita perlu menghapus entri
dengan id tersebut.
Tanpa berpikir panjang, seseorang mungkin menulis konstruksi "hebat" seperti ini:
<?php
$ids = [1, 2, 3, 4, 5]; // array untuk dihapus
foreach ($ids as $id) {
mysqli_query($link, "DELETE FROM users WHERE id=$id");
}
?>
Masalah dengan kode ini adalah banyaknya kueri
yang dieksekusi dalam loop. Bayangkan jika
ada 100 elemen dalam array - akan dieksekusi
100 kueri ke basis data!
Jebakan khusus dari tugas yang dijelaskan adalah saat mengembangkan situs, basis datanya kecil dan kueri dieksekusi sangat cepat. Namun, seiring berjalannya waktu situs di hosting, basis data akan membesar, kueri akan dieksekusi semakin lambat, dan bisa sampai pada titik di mana karena eksekusi ratusan kueri dalam loop, situs akan loading lebih dari satu menit!
Dengan usaha yang sedikit, kita bisa membuatnya sehingga hanya satu kueri yang dieksekusi, seperti ini:
<?php
$ids = [1, 2, 3, 4, 5];
$str = implode(',', $ids); // dapatkan string '1,2,3,4,5'
mysqli_query($link, "DELETE FROM users WHERE id IN ($str)");
?>
Optimalkan kode di bawah ini:
<?php
$arr = [1, 2, 2, 4, 5];
$res = [];
for ($i = 1; $i < count($arr); $i++) {
$note = mysqli_query($link, "SELECT * FROM users WHERE id=$id");
for ($data = []; $row = mysqli_fetch_assoc($note); $data[] = $row);
$res[] = $data;
}
var_dump($res);
?>