kukaew
@kukaew

Увеличивается ли нагрузка на базу данных, если один запрос вкладываешь в другой?

У меня около этого:
$z = 0;
$a= mysql_query("SELECT h 
        FROM b
       ");
while ($c=mysql_fetch_array($a))
{
       if ($z >10) break;
       $d= mysql_query("SELECT g 
        FROM e
        WHERE h = $c[h]
       ");
        while ($f=mysql_fetch_array($d))
        {
            echo $f['g'];
            $z++;
        }
}


Влияет ли на скорость и нагрузку такая вложенность или лучше первую выдачу загонять в массив, а вторую всунуть в цикл foreach? Спасибо.

UPD. Нет задачи объединять две БД. Первый запрос нужен исключительно для WHERE второго. Там всё сложно, пример упрощен для понимания.

UPD 2
Пример выше или пример ниже, что лучше?

$m= array();
$z = 0;
$a= mysql_query("SELECT h 
        FROM b
       ");
while ($c=mysql_fetch_array($a))
{ 
       array_push($m, "$c[h]"); 
}
foreach ( $m as $mo ) {

       if ($z >10) break;
       $d= mysql_query("SELECT g 
        FROM e
        WHERE h = $mo[h]
       ");
        while ($f=mysql_fetch_array($d))
        {
            echo $f['g'];
            $z++;
        }
}
}
  • Вопрос задан
  • 157 просмотров
Пригласить эксперта
Ответы на вопрос 2
bingo347
@bingo347
Crazy on performance...
Ваша задача решается одним запросом:
SELECT g FROM e
INNER JOIN b ON b.h = e.h


Много запросов - это всегда лишняя нагрузка + провалы в производительности
Ответ написан
dimonchik2013
@dimonchik2013
non progredi est regredi
https://habrahabr.ru/post/31129/

там не так все просто/однозначно, посомтрите лекции Мейл ру по Мускулю и лекции Аксенова (автор Sphinxsearch), универсального рецепта при сопоставимых задачах нет - и джойны не такие уж ресурсоемкие, и мускуль может сам выбрать неоптимальный путь (отсюда и указания конкретных индексов) и т.д.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы