Я протестировал следующий, казалось бы, простой запрос на MySQL 5.0, 5.1, 5.5 и обнаружил, что он очень медленный.
select * from entry where session_id in
(select session_id from entry where created_at > [some timestamp])
У нескольких записей может быть один и тот же идентификатор сеанса, но разные временные метки made_at.Запрос предназначен для захвата всех записей, в которых есть хотя бы одна запись из того же идентификатора сеанса, чей созданный_кат больше указанной метки времени.
Я видел, как другие говорили о проблемах производительности подзапроса MySQL с аналогичными запросами, и чтоMySQL считает подзапрос зависимым запросом и выполняет полное сканирование таблицы внешнего запроса.Предлагаемые обходные пути были что-то вроде:
select * from entry where session_id in
(select session_id from
(select session_id from entry where created_at > [some timestamp])
as temp)
Однако этот хак у меня не работает и делает его еще медленнее.
Есть идеи о том, как переписать этот запрос?