У меня есть запрос, который что-то вдоль линий:MySQL Slow ВЫБРАТЬ Query
SELECT * FROM table1
WHERE confirmed = 0
AND resource = 123
AND id IN (
SELECT id FROM table2 WHERE resource = 123
AND added > 1440000000
)
Это занимает около 3 минут, чтобы бежать, но я понятия не имею, почему. Вот почему я запутался ...
SELECT id FROM table2 WHERE resource = 123
AND added > 1440000000
По этому подзапросу результатов по данному продукту нет. Ни одного. Итак, я думал, что если бы я это сделал:
SELECT * FROM table1
WHERE confirmed = 0
AND resource = 123
AND id IN (
0
)
Это должно занимать примерно то же самое время, чтобы работать. Кроме того, он не возвращает 0 результатов, как ожидалось. Что происходит? Чем отличается сравнение пустого результата запроса с 0?
Номера строк также очень низкие. Я запустил объяснение, и он использует подтвержденный ключ для таблицы 1 и первичный ключ из таблицы 2. Количество строк равно 5500/20000 соответственно.
Любые идеи были бы очень благодарны! Спасибо!
Потому что для каждой строки 'SELECT', выполненные в вашем заявлении. Не подходит ли здесь 'JOIN'? Поправьте меня, если я пропустил что-л. –
Если вы запустили объяснение, это может быть хорошей идеей включить его. –
Вы уверены, что ресурс и добавленные поля индексируются в вашей базе данных? – itoctopus