⊗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
Ние използваме бисквитки за работата на сайта, анализ и персонализация. Обработката на данни се извършва в съответствие с Политика за поверителност.
приемам всички настройки отхвърляне