⊗ppSpOtSQ 80 of 83 menu

SQL vaicājumu izmantošanas optimizēšana PHP

SQL vaicājumu izpilde datu bāzē ir ļoti lēna darbība. Tāpēc ir jācenšas minimāli samazināt vaicājumu skaitu uz datu bāzi.

Biežākā kļūda ir vairāku SQL vaicājumu izpilde cilpā, turpretī, ka pastāv alternatīvi vaicājumi, kas ļauj vēlamo izpildīt ar vienu komandu.

Apskatīsim uz piemēra.

Pieņemsim, ka mums ir dots masīvs ar id ierakstiem datu bāzē un mums ir jāizdzēš ieraksti ar tādiem id.

Neiedziļinoties, var uzrakstīt šādu "brīnišķīgu" konstrukciju:

<?php $ids = [1, 2, 3, 4, 5]; // masīvs dzēšanai foreach ($ids as $id) { mysqli_query($link, "DELETE FROM users WHERE id=$id"); } ?>

Šī koda problēma ir tā, ka cilpā tiek izpildīts daudz vaicājumu. Iedomājieties, ka masīvā būs 100 elementu - izpildīsies 100 vaicājumi uz datu bāzi!

Īpaša šī uzdevuma slazds ir tāds, ka attīstot vietni, datu bāze ir maza un vaicājumi tiek izpildīti ļoti ātri. Tomēr, pēc vietnes darbības uz hostinga, datu bāze augs, vaicājumi tiks izpildīti arvien lēnāk, un var nonākt līdz tādam, ka veicot simts vaicājumus cilpā, vietne ielādēsies vairāk nekā minūti!

Pieliekot mazliet pūļu, var izdarīt tā, ka tiks izpildīts tikai viens vaicājums, šeit:

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

Optimizējiet zemāk redzamo kodu:

<?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); ?>
Latviešu
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Mēs izmantojam sīkdatnes, lai nodrošinātu vietnes darbību, analīti un personalizāciju. Datu apstrāde notiek saskaņā ar Konfidencialitātes politiku.
pieņemt visus iestatīt noraidīt