PHPda SQL so'rovlaridan foydalanishni optimallashtirish
Ma'lumotlar bazasiga SQL so'rovlarini bajarish juda sekin amal hisoblanadi. Shuning uchun bazaga qilinadigan so'rovlar sonini minimallashtirishga harakat qilish kerak.
Eng keng tarqalgan xato - bu tsikl ichida ko'plab SQL so'rovlarini bajarish, ayni paytda, xohlagan narsani bitta buyruq bilan bajarishga imkon beradigan muqobil so'rovlar mavjud bo'lsa.
Keling, bir misolni ko'rib chiqaylik.
Faraz qilaylik, bizda ma'lumotlar bazasidagi yozuvlarning
id massivi berilgan bo'lsin
va biz shu id ga ega yozuvlarni
o'chirishimiz kerak.
O'ylamasdan, mana shunday "ajoyib" konstruksiyani yozish mumkin:
<?php
$ids = [1, 2, 3, 4, 5]; // o'chirish uchun massiv
foreach ($ids as $id) {
mysqli_query($link, "DELETE FROM users WHERE id=$id");
}
?>
Ushbu kodning muammosi shundaki, tsikl ichida
juda ko'p so'rovlar bajariladi. Tasavvur qiling,
massivda 100 ta element bo'lsa - bazaga
100 ta so'rov bajariladi!
Tasvirlangan vazifaning alohida tuzog'i shundaki, saytni ishlab chiqish jarayonida ma'lumotlar bazasi kichik bo'ladi va so'rovlar juda tez bajariladi. Biroq, sayt xostingda ishlagani sari baza o'sib boradi, so'rovlar bajarilishi sekinlashadi, va shunday holat yuzaga kelishi mumkinki, tsikl ichida yuzlab so'rovlarni bajarish tufayli sayt bir daqiqadan ko'proq vaqtda yuklanadi!
Ozgina harakat qilib, atigi bitta so'rov bajarilishiga erishish mumkin, mana shunday:
<?php
$ids = [1, 2, 3, 4, 5];
$str = implode(',', $ids); // '1,2,3,4,5' qatorini olamiz
mysqli_query($link, "DELETE FROM users WHERE id IN ($str)");
?>
Quyida keltirilgan kodni optimallashtiring:
<?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);
?>