Я хочу понять случай, когда я запускаю два запроса по отдельности, в общей сложности это занимает около 400 мс, но когда я их объединяю с помощью суб-выбора, это занимает около 12 секунд. У меня есть две таблицы InnoDB:
- событие: 99 914 строк
- even_prizes: 24 540 770 строк
Ниже приведены мои запросы:
SELECT
id
FROM
event e
WHERE
e.status != 'SCHEDULED';
-- takes 130ms, returns 2406 rows
SELECT
id, count(*)
FROM
event_prizes
WHERE event_id in (
-- 2406 ids returned from the previous query
)
GROUP BY
id;
-- takes 270ms, returns the same amount of rows
С другой стороны, когда я запускаю запрос снизу:
SELECT
id, count(*)
FROM
event_prizes
WHERE event_id in (
SELECT
id
FROM
event e
WHERE
e.status != 'SCHEDULED'
)
GROUP BY
id;
-- takes 12seconds
Я предполагаю, что во втором случае MySQL выполняет полное сканирование таблицы event_prizes? Есть ли лучший способ создать один запрос для этого случая?