Optimizimi i përdorimit të kërkesave SQL në PHP
Ekzekutimi i kërkesave SQL në bazën e të dhënave është një operacion shumë i ngadaltë. Prandaj duhet të përpiqemi të minimizojmë numrin e kërkesave në bazë.
Gabimi më i zakonshëm është ekzekutimi i shumë kërkesave SQL në një lak, kurse ekzistojnë kërkesa alternative që lejojnë të kryhet e dëshiruara me një komandë.
Le të shohim me një shembull.
Le të themi se na është dhënë një grup me id të regjistrimeve
në bazën e të dhënave dhe ne duhet të fshijmë regjistrimet
me ato id.
Pa menduar shumë, mund të shkruajmë një konstruksion "të mrekullueshëm" të tillë:
<?php
$ids = [1, 2, 3, 4, 5]; // grup për fshirje
foreach ($ids as $id) {
mysqli_query($link, "DELETE FROM users WHERE id=$id");
}
?>
Problemi i këtij kodi është se në lak ekzekutohet
shumë kërkesa. Imagjinoni sikur
në grup të ketë 100 elementë - do të ekzekutohen
100 kërkesa në bazë!
Kurtha e veçantë e detyrës së përshkruar është se gjatë zhvillimit të faqes internetore baza e të dhënave është e vogël dhe kërkesat ekzekutohen shumë shpejt. Megjithatë, ndërsa faqja internetore punon në hosting, baza do të rritet, kërkesat do të ekzekutohen gjithnjë e më ngadalë, dhe mund të arrijë në atë pikë që, për shkak të ekzekutimit të qindra kërkesave në lak, faqja të ngarkohet më shumë se një minutë!
Duke bërë shumë pak përpjekje, mund të bëhet që të ekzekutohet vetëm një kërkesë, kështu:
<?php
$ids = [1, 2, 3, 4, 5];
$str = implode(',', $ids); // marrim stringun '1,2,3,4,5'
mysqli_query($link, "DELETE FROM users WHERE id IN ($str)");
?>
Optimizoni kodin e dhënë më poshtë:
<?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);
?>