Оптимизатсияи истифодаи дархостҳои SQL дар PHP
Иҷрои дархостҳои SQL ба пойгоҳи додаҳо амалиёти хеле суст аст. Аз ин рӯ, кӯшиш кардан лозим аст, ки миқдори дархостҳо ба пойгоҳро ба ҳадди ақалл расонем.
Иштибоҳи маъмултарин иҷрои бисёр дархости SQL дар ҳалқа аст, ҳол он ки дархостҳои алтернативӣ мавҷуданд, ки мегӯянд иҷро кардан мехоҳанд як фармон.
Бинед мисол.
Бигзор ба мо массиве дода шуда боid сабтҳо дар пойгоҳи додаҳо ва ба мо лозим аст, ки сабтҳои бо чунин id-ҳоро нест кунем.
Дар ҳоле ки ин кор намекунад, мо метавонем чунин сохтори "ҳайратафзо" нависед:
<?php
$ids = [1, 2, 3, 4, 5]; // массив барои нест кардан
foreach ($ids as $id) {
mysqli_query($link, "DELETE FROM users WHERE id=$id");
}
?>
Мушкилии ин код дар он аст, ки дар ҳалқа бисёр дархост иҷро мешавад. Тасаввур кунед, ки дар массиве 100 элемент бошад - 100 дархост ба пойгоҳ иҷро мешавад!
Қулфи махсуси вазифаи тавсифшуда дар он аст, ки ҳангоми таҳияи сомона пойгоҳи додаҳо хурд аст ва дархостҳо хеле зуд иҷро мешаванд. Аммо, ҳангоми кори сомона дар хостинг пойгоҳ афзоиш хоҳад ёфт, дархостҳо ҳама сусттар иҷро мешаванд, ва то ба ҷое мерасад, ки ба сабаби иҷрои сад дархост дар ҳалқа сомона зиёда аз як дақиқа бор мешавад!
Бо сарф кардани кам кӯшиш, мо метавонем чунин кунем, ки танҳо як дархост иҷро шавад, чунин:
<?php
$ids = [1, 2, 3, 4, 5];
$str = implode(',', $ids); // сатрро '1,2,3,4,5' мегирем
mysqli_query($link, "DELETE FROM users WHERE id IN ($str)");
?>
Коди дар поён овардашударо оптимизатсия кунед:
<?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);
?>