⊗ppSpOtSQ 80 of 83 menu

SQL užklausų naudojimo optimizavimas PHP

SQL užklausų vykdymas duomenų bazėje yra labai lėtas veiksmas. Todėl reikia stengtis sumažinti užklausų skaičių į duomenų bazę.

Dažniausia klaida yra daugelio SQL užklausų vykdymas cikle, nors egzistuoja alternatyvios užklausos, leidžiančios pageidautina veiksmą atlikti viena komanda.

Pažiūrėkime pavyzdžiu.

Tarkime, kad mums duotas masyvas su id įrašų duomenų bazėje ir mums reikia ištrinti įrašus su tokiais id.

Negalvojant ilgai, galima parašyti tokią "nuostabią" konstrukciją:

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

Šio kodo problema ta, kad cikle vykdoma daug užklausų. Įsivaizduokite, kad masyve bus 100 elementų - vyks 100 užklausos į duomenų bazę!

Ypatinga aprašytos užduotės spastai ta, kad kuriant svetainę duomenų bazė yra maža ir užklausos vykdomos labai greitai. Tačiau, veikiant svetainei talpinimo srityje, duomenų bazė augs, užklausos vyks vis lėčiau, ir gali ateiti toks laikas, kad dėl šimto užklausų vykdymo cikle svetainė krausis ilgiau nei minutę!

Panaudojus nedaug pastangų, galima padaryti taip, kad vyktų tik viena užklausa, štai taip:

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

Optimizuokite žemiau pateiktą kodą:

<?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); ?>
Lietuvių
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Mes naudojame slapukus svetainės veikimui, analizei ir personalizavimui. Duomenų apdorojimas vyksta pagal Privatumo politiką.
priimti visus nustatyti atšaukti