⊗ppSpOtSQ 80 of 83 menu

Optimalizácia používania SQL dopytov v PHP

Vykonávanie SQL dopytov k databáze je veľmi pomalá operácia. Preto je potrebné sa snažiť minimalizovať počet dopytov k databáze.

Najčastejšou chybou je vykonávanie mnohých SQL dopytov v cykle, pričom existujú alternatívne dopytov, ktoré umožňujú vykonať požadovanú operáciu jedným príkazom.

Pozrime sa na príklad.

Nech je nám dané pole s id záznamov v databáze a je potrebné odstrániť záznamy s takýmito id.

Bez dlhšieho rozmýšľania je možné napísať takúto "vynikajúcu" konštrukciu:

<?php $ids = [1, 2, 3, 4, 5]; // pole pre odstránenie foreach ($ids as $id) { mysqli_query($link, "DELETE FROM users WHERE id=$id"); } ?>

Problém tohto kódu je v tom, že v cykle sa vykonáva veľké množstvo dopytov. Predstavte si, že v poli bude 100 prvkov - vykoná sa 100 dopytov k databáze!

Osobitná pasca opísanej úlohy je v tom, že pri vývoji webovej stránky je databáza malá a dopytov sa vykonávajú veľmi rýchlo. Avšak, počas prevádzky stránky na hostingu bude databáza rásť, dopytov sa budú vykonávať čoraz pomalšie, a môže dôjsť k tomu, že v dôsledku vykonania stovky dopytov v cykle sa bude stránka načítavať viac ako minútu!

S vynaložením veľmi malého úsilia je možné urobiť tak, že sa vykoná iba jeden dopyt, takto:

<?php $ids = [1, 2, 3, 4, 5]; $str = implode(',', $ids); // získame reťazec '1,2,3,4,5' mysqli_query($link, "DELETE FROM users WHERE id IN ($str)"); ?>

Optimalizujte nižšie uvedený kód:

<?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); ?>
Slovenčina
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Používame cookies na fungovanie stránky, analýzu a personalizáciu. Spracúvanie údajov prebieha v súlade s Politikou ochrany osobných údajov.
prijať všetky nastaviť odmietnuť