⊗ppSpOtSQ 80 of 83 menu

Optymalizacja wykorzystania zapytań SQL w PHP

Wykonywanie zapytań SQL do bazy danych jest bardzo powolną operacją. Dlatego należy starać się minimalizować liczbę zapytań do bazy.

Najczęstszym błędem jest wykonywanie wielu zapytań SQL w pętli, podczas gdy istnieją alternatywne zapytania, pozwalające wykonać pożądane działanie jednym poleceniem.

Spójrzmy na przykład.

Załóżmy, że mamy daną tablicę z id rekordów w bazie danych i musimy usunąć rekordy z takimi id.

Bez dłuższego myślenia, można napisać taką "wspaniałą" konstrukcję:

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

Problem tego kodu polega na tym, że w pętli wykonywane jest wiele zapytań. Wyobraź sobie, że w tablicy będzie 100 elementów - wykonają się 100 zapytania do bazy!

Szczególna pułapka opisanego zadania polega na tym, że podczas tworzenia strony baza danych jest mała i zapytania wykonują się bardzo szybko. Jednakże, w miarę działania strony na hostingu baza będzie rosnąć, zapytania będą wykonywane coraz wolniej, i może dojść do tego, że z powodu wykonania setek zapytań w pętli strona będzie ładować się ponad minutę!

Wkładając niewiele wysiłku, można sprawić, że wykona się tylko jedno zapytanie, w ten sposób:

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

Zoptymalizuj podany poniżej kod:

<?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); ?>
Polski
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Wykorzystujemy pliki cookie do działania strony, analizy i personalizacji. Przetwarzanie danych odbywa się zgodnie z Polityką prywatności.
zaakceptuj wszystkie dostosuj odrzuć