Pengoptimuman Penggunaan Pertanyaan SQL dalam PHP
Pelaksanaan pertanyaan SQL ke pangkalan data adalah operasi yang sangat perlahan. Oleh itu, kita perlu berusaha untuk meminimumkan bilangan pertanyaan kepada pangkalan data.
Kesilapan yang paling biasa ialah melaksanakan banyak pertanyaan SQL dalam gelung, sedangkan terdapat pertanyaan alternatif yang membolehkan keinginan dicapai dengan satu arahan.
Mari kita lihat contoh.
Katakan kita diberikan tatasusunan dengan id entri
dalam pangkalan data dan kita perlu memadam entri
dengan id tersebut.
Tanpa berfikir panjang, kita boleh menulis konstruksi "hebat" seperti ini:
<?php
$ids = [1, 2, 3, 4, 5]; // tatasusunan untuk dipadam
foreach ($ids as $id) {
mysqli_query($link, "DELETE FROM users WHERE id=$id");
}
?>
Masalah kod ini ialah banyak pertanyaan dilaksanakan
dalam gelung. Bayangkan, jika
tatasusunan mempunyai 100 elemen -
100 pertanyaan akan dilaksanakan ke pangkalan data!
Perangkap khusus tugas yang diterangkan ialah apabila membangunkan tapak web, pangkalan data adalah kecil dan pertanyaan dilaksanakan dengan sangat pantas. Walau bagaimanapun, seiring dengan operasi tapak web di hos, pangkalan data akan membesar, pertanyaan akan menjadi semakin perlahan, dan mungkin sampai ke tahap di mana disebabkan oleh pelaksanaan ratusan pertanyaan dalam gelung, tapak web akan mengambil masa lebih daripada satu minit untuk dimuatkan!
Dengan usaha yang sedikit, kita boleh membuat hanya satu pertanyaan dilaksanakan, seperti ini:
<?php
$ids = [1, 2, 3, 4, 5];
$str = implode(',', $ids); // dapatkan rentetan '1,2,3,4,5'
mysqli_query($link, "DELETE FROM users WHERE id IN ($str)");
?>
Optimumkan kod di bawah:
<?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);
?>