Я думаю, что столкнулся с этой MySql ошибкой , но решение ссылается на комментарий, который больше не существует. Кто-нибудь знает, каково решение?
Мой конкретный пример использования - игра с раундами. Я хочу найти все (игровые, круглые) пары, в которых после события «Действие» нет событий «Бездействие». Это мой запрос:
SELECT
*
FROM
(
SELECT
MAX(id) AS id,
game_id,
round
FROM event
WHERE
type_of="Action"
GROUP BY
game_id, round
) AS last_action
LEFT JOIN (
SELECT
MAX(id) AS id,
game_id,
round
FROM event
WHERE
type_of="Inaction"
GROUP BY
game_id, round
) AS last_inaction
USING
(game_id, round)
WHERE
last_inaction.id IS NULL
OR last_action.id > last_inaction.id;
Это выполняется очень медленно и имеет ОБЪЯСНЕНИЕ, включая Using where; Using join buffer (Block Nested Loop)
. Но если я отредактирую оператор WHERE запроса на функционально эквивалентный
WHERE
last_inaction.id IS NULL
OR last_action.id > last_inaction.id + 0;
, запрос выполняется почти мгновенно и не включает Using where; Using join buffer (Block Nested Loop)
.