⊗ppSpOtSQ 80 of 83 menu

Optimizacija uporabe SQL poizvedb v PHP

Izvajanje SQL poizvedb na podatkovno bazo je zelo počasna operacija. Zato si moramo prizadevati minimizirati število poizvedb na bazo.

Najpogostejša napaka je izvajanje številnih SQL poizvedb v zanki, čeprav obstajajo alternativne poizvedbe, ki omogočajo izvedbo želenega z enim ukazom.

Poglejmo si na primeru.

Recimo, da imamo dano polje z id zapisi v podatkovni bazi in moramo izbrisati zapise s takšnimi id.

Brez dolgega razmišljanja lahko napišemo takšno "čudovito" konstrukcijo:

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

Težava te kode je v tem, da se v zanki izvede veliko poizvedb. Predstavljajte si, da bo v polju 100 elementov - izvedlo se bo 100 poizvedb na bazo!

Posebna past opisanega problema je v tem, da je pri razvoju spletnega mesta podatkovna baza majhna in se poizvedbe izvajajo zelo hitro. Vendar pa bo z delovanjem spletnega mesta na gostovanju baza rasla, poizvedbe bodo potekale vse počasneje, in lahko pride do tega, da bo zaradi izvajanja stotih poizvedb v zanki spletno mesto se nalagalo več kot minuto!

Z zelo malo truda lahko naredimo tako, da se izvede le ena poizvedba, takole:

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

Optimizirajte spodnjo kodo:

<?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
Za delovanje spletnega mesta, analitiko in personalizacijo uporabljamo piškotke. Obdelava podatkov poteka v skladu s Politiko zasebnosti.
sprejmi vse nastavi zavrni