⊗ppSpOtSQ 80 of 83 menu

SQL-kyselyjen käytön optimointi PHP:ssä

SQL-kyselyjen suorittaminen tietokantaan on erittäin hidas toimenpide. Siksi on pyrittävä minimoimaan kyselyjen määrää tietokantaan.

Yleisin virhe on useiden SQL-kyselyjen suorittaminen silmukassa, vaikka on olemassa vaihtoehtoisia kyselyjä, jotka mahdollistavat halutun toimenpiteen yhdellä komennolla.

Katsotaan esimerkkiä.

Oletetaan, että meillä on taulukko, joka sisältää tietokannan tietueiden idt ja meidän on poistettava tietueet, joilla on nämä idt.

Välittömästi voidaan kirjoittaa tällainen "mainio" rakenne:

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

Tämän koodin ongelma on, että silmukassa suoritetaan useita kyselyjä. Kuvittele, että taulukossa on 100 elementtiä - suoritetaan 100 kyselyä tietokantaan!

Kuvatun tehtävän erityis ansa on, että sivustoa kehitettäessä tietokanta on pieni ja kyselyt suoritetaan erittäin nopeasti. Kuitenkin, sivuston toiminnan myötä hosting-ympäristössä tietokanta kasvaa, kyselyt suoritetaan yhä hitaammin, ja voi päästä tilanteeseen, jossa satojen kyselyjen suorittaminen silmukassa johtaa siihen, että sivusto latautuu yli minuutin!

Käyttämällä vain vähän vaivaa, voidaan tehdä niin, että suoritetaan vain yksi kysely, näin:

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

Optimoi alla oleva koodi:

<?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); ?>
Suomi
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Käytämme evästeitä verkkosivuston toiminnalle, analytiikalle ja personoinnille. Tietojen käsittely tapahtuu Tietosuojakäytännön mukaisesti.
hyväksy kaikki mukauta hylkää