Какой из этих запросов MySQL является более эффективным, используя левое соединение или нет - PullRequest
1 голос
/ 13 августа 2011

У меня следующий SQL-запрос

$select_query_1 = SELECT * FROM user_module_comments WHERE useid = '$hash' ORDER BY id DESC LIMIT 0, 25
  while($table = mysql_fetch_array($select_query_1)){
    $user_moid = $table['canvas'];
    $user_xtract_canvas = mysql_query("SELECT mcanvas FROM user_module WHERE uid = '$user_moid' LIMIT 1");
    $selected = mysql_fetch_array($user_xtract_canvas);
    $user_canvas_extract = $selected['mcanvas']; // this is what i need
  }

ИЛИ этот SQL-запрос

$select_query = SELECT user_module_comments.useid, user_module.mcanvas FROM user_module_comments LEFT JOIN user_module ON user_module.uid = user_module_comments.useid WHERE useid = '$hash' ORDER BY user_module_comments.id DESC LIMIT 0, 25

, какой из этих запросов более эффективен, спасибо

1 Ответ

1 голос
/ 13 августа 2011

JOIN, вероятно, будет намного, намного быстрее, чем выполнение связанных запросов в цикле.В целом, почти всегда быстрее выполнить один запрос, чем n запросов.Я говорю «почти всегда», потому что уверен, что кто-то может придумать вариант использования, в котором может быть верно обратное.

Существует много накладных расходов, связанных с многократной компиляцией SQL-оператора в MySQL.цикл, его выполнение и выборка набора строк.Использование одного оператора устраняет все эти издержки.

Вы должны установить Xdebug и фактически профилировать эти операторы в PHP, чтобы узнать, сколько времени они занимают.

...