⊗ppSpOtSQ 80 of 83 menu

Аптымізацыя выкарыстання SQL запытаў у PHP

Выкананне SQL запытаў да базы даных з'яўляецца вельмі павольнай аперацыяй. Таму трэба імкнуцца мінімізаваць колькасць запытаў да базы.

Самай распаўсюджанай памылкай з'яўляецца выкананне мноства SQL запытаў у цыкле, пры тым, што існуюць альтэрнатыўныя запыты, якія дазваляюць выканаць жаданае адной камандай.

Паглядзім на прыкладзе.

Хай у нас дадзены масіў з id запісаў у базе даных і нам неабходна выдаліць запісы з такімі id.

Не доўга думаючы, можна напісаць вось такую "цудоўную" канструкцыю:

<?php $ids = [1, 2, 3, 4, 5]; // масіў для выдалення foreach ($ids as $id) { mysqli_query($link, "DELETE FROM users WHERE id=$id"); } ?>

Праблема гэтага кода ў тым, што ў цыкле выконваецца мноства запытаў. Уявіце сабе, што ў масіве будзе 100 элементаў - выканаецца 100 запытаў да базы!

Асаблівая пастка апісанай задачы ў тым, што пры распрацоўцы сайта база даных маленькая і запыты выконваюцца вельмі хутка. Аднак, у меру работы сайта на хастынгу база будзе расці, запыты будуць выконвацца ўсё павольней, і можа дайсці да таго, што з-за выкананні сотні запытаў у цыкле сайт будзе грузіцца больш за хвіліну!

Прылажыўшы зусім няшмат намаганняў, можна зрабіць так, што будзе выконвацца ўсяго адзін запыт, вось так:

<?php $ids = [1, 2, 3, 4, 5]; $str = implode(',', $ids); // атрымаем радок '1,2,3,4,5' mysqli_query($link, "DELETE FROM users WHERE id IN ($str)"); ?>

Аптымізуйце прыведзены ніжэй код:

<?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); ?>
Беларуская
AfrikaansAzərbaycanБългарскиবাংলাČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Мы выкарыстоўваем cookie для працы сайта, аналітыкі і персаналізацыі. Апрацоўка дадзеных адбываецца згодна Палітыкай канфідэнцыяльнасці.
прыняць усе наладзіць адхіліць