synch
@synch

LEFT JOIN в одном запросе или два запроса с IN?

Добрый день. Кто сталкивался с приведенной ниже задачей, что будет работать быстрее из двух вариантов реализации?
joomla
class .... extends JTable

1ый вариант.
{
  $query = "SELECT rtc.id, rtc.created, rtc.published, rtc.content_id, rtc.user_id, rtcc.content
                  FROM `#__jshopping_rtcomments` as rtc
                  LEFT JOIN `#__jshopping_rtcomments_content` as rtcc ON rtc.content_id = rtcc.content_id 
                  LIMIT 50";
  $this->_db->setQuery($query);
  $result = $this->_db->loadObjectList();
}


или 2ой вариант
{
  $query = "SELECT rtc.id, rtc.created, rtc.published, rtc.content_id, rtc.user_id
                  FROM `#__jshopping_rtcomments` as rtc
                  LIMIT 50";
  $this->_db->setQuery($query);
  $result_A = $this->_db->loadObjectList('id');
  
  $query = "SELECT rtcc.content_id, rtcc.content
                  FROM `#__jshopping_rtcomments_content` as rtcc 
                  WHERE rtcc.content_id IN (" . implode(", ", array_keys($result_A)) . ")";
  $this->_db->setQuery($query);
  $result_B = $this->_db->loadObjectList('content_id');
}


В первом случае как sql работает, сначала left join двух больших таблиц, а потом limit? Left join не будет ли тормозить при объединении таблиц с 300к-400к записей. А во втором случае не будет ли тормозить сам php?
  • Вопрос задан
  • 669 просмотров
Пригласить эксперта
Ответы на вопрос 3
Wolfnsex
@Wolfnsex
Если не хочешь быть первым - не вставай в очередь!
Что бы узнать что будет быстрее - нужно понимать, в каком порядке выполняется запрос. MySQL в этом плане довольно специфическая БД с массой своих особенностей.

Наиболее простой вариант выяснить скорость выполнения запроса - посмотреть, сколько запрос выполняется в программе для администрирования MySQL (любой, вменяемой, например, HeidiSQL).

Способ чуть посложнее - воспользоваться EXPLAIN.
Ответ написан
Естественно, быстрее будет работать вариант с одним запросом. Limit обрабатывается после всего, что есть в запросе, и не влияет на собственно обработку запроса.
Ответ написан
@vshvydky
EXPLAIN SELECT .....
помимо того, что увидишь скорость обоих запросов, сможешь еще увидеть где идет неиндексированный поиск и оптимизировать
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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