⊗ppSpOtSQ 80 of 83 menu

Optimizarea utilizării interogărilor SQL în PHP

Executarea interogărilor SQL către baza de date este o operație foarte lentă. De aceea, trebuie să încercăm să minimizăm numărul de interogări către bază.

Cea mai frecventă greșeală este executarea unei multitudini de interogări SQL într-o buclă, atunci când există interogări alternative care permit realizarea dorinței cu o singură comandă.

Să privim un exemplu.

Să presupunem că avem un array cu id-uri ale înregistrărilor în baza de date și trebuie să ștergem înregistrările cu astfel de id.

Fără să ne gândim mult, am putea scrie următoarea construcție "minunată":

<?php $ids = [1, 2, 3, 4, 5]; // array pentru ștergere foreach ($ids as $id) { mysqli_query($link, "DELETE FROM users WHERE id=$id"); } ?>

Problema acestui cod este că în buclă se execută multe interogări. Imaginați-vă că în array vor fi 100 de elemente - se vor executa 100 de interogări către bază!

Capcana deosebită a sarcinii descrise este că în timpul dezvoltării site-ului, baza de date este mică și interogările se execută foarte repede. Cu toate acestea, pe măsură ce site-ul funcționează pe hosting, baza va crește, interogările se vor executa din ce în ce mai lent, și se poate ajunge la astfel de situații, încă din cauza executării unei sute de interogări în buclă, site-ul se va încărca mai mult de un minut!

Aplicând un efort foarte mic, putem face astfel încât să se execute doar o singură interogare, astfel:

<?php $ids = [1, 2, 3, 4, 5]; $str = implode(',', $ids); // obținem șirul '1,2,3,4,5' mysqli_query($link, "DELETE FROM users WHERE id IN ($str)"); ?>

Optimizați codul de mai jos:

<?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); ?>
Română
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Folosim cookie pentru funcționarea site-ului, analiză și personalizare. Prelucrarea datelor are loc în conformitate cu Politica de confidențialitate.
acceptă toate configurează respinge