Задать вопрос
Anubis
@Anubis
Люблю корейскую кухню и веб-разработку

Подсчёт количества рядов: подзапрос или left join?

select
  a.id, a.title, a.content,
  (select count(id) from comments where article_id = a.id) comments
from
  articles a

Или
select
  a.id, a.title, a.content,
  count(distinct c.id) comments
from
  articles a
  left join comments c on c.article_id = a.id

Какой запрос лучше с точки зрения оптимизации?
  • Вопрос задан
  • 118 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 3
@ComodoHacker
Второй лучше. У оптимизатора запросов больше свободы для маневра.
Ответ написан
Комментировать
Melkij
@Melkij
PostgreSQL DBA
select
  a.id, a.title, a.content,
  count(c.id) comments
from
  articles a
  left join comments c on c.article_id = a.id
group by a.id

Зачем вам count distinct тут внезапно понадобился и где потеряли группировку?

Вообще count под OLTP жуткая вещь с точки зрения базы - это надо прочитать каждую строчку, проверить её видимость в текущей транзакции, проверить на null и всё только ради одной циферки. Добавьте в articles колонку с числом комментариев, а за актуальностью могут следить несколько простых триггеров.
Ответ написан
@IceJOKER
Web/Android developer
А что вам мешает выполнить оба запроса и проверить, что же на самом деле лучше, а? Довольно просто же , чем ждать ответа 5 минут.
А еще лучше с помощью EXPLAIN
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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