⊗ppSpOtSQ 80 of 83 menu

SQL lekérdezések optimalizálása PHP-ban

Az SQL lekérdezések végrehajtása az adatbázisban nagyon lassú művelet. Ezért igyekezni kell minimalizálni az adatbázis lekérdezések számát.

A leggyakoribb hiba számos SQL lekérdezés végrehajtása egy ciklusban, miközben léteznek alternatív lekérdezések, amelyek lehetővé teszik a kívánt művelet elvégzését egyetlen paranccsal.

Nézzük ezt egy példán keresztül.

Tegyük fel, hogy kapunk egy tömböt a rekordok id adataival az adatbázisban, és törölnünk kell azokat a rekordokat, amelyek ezekkel a id értékekkel rendelkeznek.

Gondolkodás nélkül megírhatnánk egy ilyen "csodás" konstrukciót:

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

Ennek a kódnak a problémája az, hogy a ciklusban számtalan lekérdezés hajtódik végre. Képzeld el, hogy a tömbben 100 elem van - 100 lekérdezés fog lefutni az adatbázison!

Az említett feladat különös buktatója, hogy amikor a weboldalt fejlesztjük, az adatbázis kicsi és a lekérdezések nagyon gyorsan lefutnak. Azonban, ahogy a weboldal a hosztoláson működik, az adatbázis növekedni fog, a lekérdezések egyre lassabban fognak futni, és eljuthat oda a helyzet, hogy a száz lekérdezés ciklusban történő végrehajtása miatt a weboldal több mint egy percig tölt!

Nagyon kevés erőfeszítéssel elérhetjük, hogy csak egyetlen lekérdezés hajtódjon végre, így:

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

Optimalizálja az alábbi kódot:

<?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); ?>
Magyar
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
A weboldal működéséhez, elemzéshez és személyre szabáshoz sütiket használunk. Az adatfeldolgozás a Adatvédelmi irányelvek szerint történik.
összes elfogadása beállítás elutasítás