Я пытаюсь запустить этот запрос. Это очень медленно. После 30 секунд я до сих пор не получил никаких результатов.Запрос MySql с подзапросом очень медленный
У меня есть указатели на шаге, source, video_id.
шаг 1 видео загружено
шаг 4 видео готово для загрузки
источник 5 представляет собой тип видео
В encoding_history таблице, у меня много раз одни и те же video_id с различными этапами процесса (загрузка, кодирование, ...)
Моя потребность в том, чтобы получить все видео, загруженные mo чем 6 часов назад и еще не готовы к загрузке.
Если я удаляю подзапрос, это довольно быстро.
Мой стол имеет около 6.000.000 записей.
$query = 'SELECT video_id FROM encoding_history WHERE
video_id NOT IN (SELECT video_id FROM encoding_history WHERE step = 4 AND source = 5 GROUP BY video_id)
AND step = 1
AND source = 5
AND date_added > DATE_SUB(NOW(), INTERVAL 6 HOUR)';
Любые идеи о том, как ускорить мои результаты? Благодарю.
Попробуйте выполнить план выполнения запроса с помощью ['EXPLAIN'] (http://dev.mysql.com/doc/refman/5.5/en/explain.html). Также используйте 'SQL_NO_CACHE' при отладке. –
Рассмотрите возможность использования не существует или соединение вместо подбора select и избавиться от группы путем выбора sub, не думайте, что это необходимо. – xQbert
Можете ли вы изменить подзапрос, чтобы просто быть 'SELECT DISTINCT video_id FROM encoding_history WHERE step = 4 AND source = 5' (удалить группу) –