База данных. вложенный SQL запрос, оптимизация

Добрый день.

знаю, что многие намного лучше меня шарят в SQL.

вопрос такой. СУБД MySQL.

Можно ли ускорить запрос примерно такого вида

select t1.id, t1.name,
case when repcount.rcount is null then 0 else repcount.rcount end as rcnt  
 FROM `parts` as t1
LEFT JOIN (SELECT count(*) as rcount, r.`part` as rpart 
  FROM `results` as r
    GROUP BY r.`part`) as repcount on repcount.rpart=`part`.id
WHERE условия для t1

записей, разумеется, очень много. поэтому LEFT JOIN в купе с вложенным GROUP BY работает чрезвычайно медленно.

можно ли ускорить запрос?

может типа такого и что там EXPLAIN покажет

select t1.id, t1.name,SUM(CASE WHEN r.part is null then 0 else 1 end) as rcnt  
  FROM `parts` as t1 LEFT JOIN `results` as r ON r.part=t1.id
  GROUP by t1.id, t1.name
  WHERE условия для t1

add
если в мускуле count может null проигнорировать, то вместо sum его засунуть:
COUNT(r.part)

1 лайк

Да, отличный ход! Так работает. СПАСИБО!!! :+1:

проверил. count действительно игнорирует null записи (я о таком поведении вообще не знал :crazy_face: )
впрочем, в данном случае на скорость выполнения не влияет, одинаково с SUM( case when … is null)

вопрос решён. ещё раз спасибо!