Задать вопрос
@Rhapsody

Как избавиться от use temporary в запросе, содержащем GROUP BY?

Нужно избавиться от use temporary, он крайне накладен. Дайте пожалуйста совет.
Запрос:
SELECT 
    COUNT(*)
FROM
    (SELECT 
        i.*
    FROM
        `item` AS `i`
    LEFT JOIN `cat_struct` AS `cs` ON (i.cat_id = cs.id)
    WHERE
        (`i`.`status` = 'active')
            AND (`i`.`has_image` = 'yes')
            AND (`i`.`type` = 'advert')
            AND (`cs`.`lkey` >= '4094')
            AND (`cs`.`lkey` <= '4877')
            AND (`cs`.`rkey` >= '0')
            AND (`cs`.`rkey` <= '4877')
    GROUP BY `i`.`id` ORDER BY NULL) AS tbl;


d043ba46513a460cad96b22cf2aa90a3.png
  • Вопрос задан
  • 184 просмотра
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
SELECT 
        COUNT(*)
    FROM
        `item` AS `i`
    LEFT JOIN `cat_struct` AS `cs` ON (i.cat_id = cs.id)
    WHERE
        (`i`.`status` = 'active')
            AND (`i`.`has_image` = 'yes')
            AND (`i`.`type` = 'advert')
            AND (`cs`.`lkey` BETWEEN '4094'AND '4877')
            AND (`cs`.`rkey` BETWEEN '0' AND '4877')
    GROUP BY `i`.`id`

дополнительно: т.к. вы в условии WHERE используете cs, то запрос по сути INNER
Ответ написан
Ваш ответ на вопрос

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

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