SELECT SUM(a.situacao =2 OR a.situacao =0) AS cotacoes,
SUM(a.situacao =1) AS n_publicar,
SUM(a.inicio <= NOW() AND DATE_ADD(a.inicio, INTERVAL a.duracao HOUR) >= NOW() AND a.situacao =2) AS disputa,
SUM(a.inicio > NOW() AND a.situacao =2) AS agendados,
SUM(DATE_ADD(a.inicio, INTERVAL a.duracao HOUR) <= NOW() AND a.situacao =2 AND a.id_vencedor = -2) AS analise,
SUM(a.prazoi > NOW() AND a.situacao =2 AND a.id_vencedor >0) AS aguardando_execucao,
SUM(a.situacao =0) AS cancelados,
SUM(DATE_ADD(a.inicio, INTERVAL a.duracao HOUR) <= NOW() AND a.situacao =2 AND a.id_vencedor = -3) AS fracassados,
SUM(a.prazot < NOW() AND a.situacao =2 AND a.id_vencedor >0 AND (b.id_avaliacao IS NULL OR b.id_avaliacao = '')) AS avaliacao,
SUM(a.situacao =2 AND a.id_vencedor >0 AND a.prazot > NOW() AND a.prazoi <= NOW()) AS execucao
FROM leilao_pregoes a
LEFT JOIN leilao_avaliacao b ON a.id_pregao = b.id_pregao AND b.situacao = 1
INNER JOIN leilao_edital c ON a.id_edital = c.id_edital
WHERE c.id_comprador =1
Я знаю, что это может быть улучшено ...Оптимизировать этот медленный MySQL запрос
Начните с форматирования, чтобы и вы, и другие люди могли это понять. –
Это будет довольно открытый вопрос, потому что вы делаете так много в одном утверждении, и у нас нет всей необходимой информации, например. типы данных, количество записей и т. д. Но в любом случае вы можете решить проблему с повторным форматированием. – LordWilmore
, чтобы улучшить время запроса, вы, вероятно, должны добавить ** индексы **, где это полезно для этого запроса. Я считаю, что сам запрос не может быть улучшен (или mysql должен сделать это для вас в худшем случае), но, насколько я могу судить, вы не делаете ничего сумасшедшего. индексы по тем атрибутам, которые вы используете в условиях соединения и в предложении where. – Jakumi