⊗ppSpOtSQ 80 of 83 menu

SQL päringute optimeerimine PHP-s

SQL päringute käivitamine andmebaasi on väga aeglane toiming. Seetõttu tuleks püüda minimeerida andmebaasi päringute arvu.

Kõige levinum viga on mitme SQL päringu käivitamine tsüklis, kuigi on olemas alternatiivsed päringud, mis võimaldavad soovitud toimingut teha ühe käsklusega.

Vaatame näidet.

Oletame, et meil on massiiv andmebaasi kirjetega id väärtustega ja meil on vaja kustutada kirjed nende id väärtustega.

Mõtlemata pikemalt, võib kirjutada järgmise "imelise" konstruktsiooni:

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

Selle koodi probleem on selles, et tsüklis käivitatakse palju päringuid. Kujutage ette, et massiivis on 100 elementi - tehakse 100 andmebaasipäringut!

Kirjeldatud ülesande eripära on selles, et veebisaidi arendamise ajal on andmebaas väike ja päringud käivituvad väga kiiresti. Siiski, kui sait hostingu peal töötab, andmebaas kasvab, päringud muutuvad aina aeglasemaks ja võib jõuda selleni, et sadade päringute käivitamine tsüklis põhjustab veebilehe laadimise ajal üle minuti!

Väikese pingutusega saab teha nii, et käivitatakse vaid üks päring, nagu siin:

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

Optimeerige allolev kood:

<?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); ?>
Eesti
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Me kasutame saidi toimimiseks, analüüsi ja personaliseerimiseks küpsiseid. Andmete töötlemine toimub vastavalt Privaatsuspoliitikale.
nõustu kõigega häälesta keeldu