Подзапрос MySQL очень медленный… Временное решение?

Я протестировал следующий, казалось бы, простой запрос в MySQL 5.0, 5.1, 5.5 и обнаружил, что он работает очень медленно.

select * from entry where session_id in
    (select session_id from entry where created_at > [some timestamp])

Множественные записи может иметь тот же идентификатор сеанса, но разные временные метки created_at. Мы протестировали следующий, казалось бы, простой запрос в MySQL 5.0, 5.1, 5.5 и обнаружили, что он работает очень медленно. select * from entry where session_id in (select session_id from entry where created_at & ...

Я протестировал следующий, казалось бы, простой запрос в MySQL 5.0, 5.1, 5.5 и обнаружил, что он работает очень медленно.

select * from entry where session_id in
    (select session_id from entry where created_at > [some timestamp])

Множественные записи может иметь тот же идентификатор сеанса, но разные временные метки created_at. Мы протестировали следующий, казалось бы, простой запрос в MySQL 5.0, 5.1, 5.5 и обнаружили, что он работает очень медленно. select * from entry where session_id in (select session_id from entry where created_at & ...

Я протестировал следующий, казалось бы, простой запрос в MySQL 5.0, 5.1, 5.5 и обнаружил, что он работает очень медленно.

select * from entry where session_id in
    (select session_id from entry where created_at > [some timestamp])

Множественные записи может иметь тот же идентификатор сеанса, но разные временные метки created_at. Запрос предназначен для захвата всех записей, которые имеют хотя бы одну запись из того же session_id, чье created_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)

Однако этот прием не работает для меня и делает его еще медленнее.

Есть идеи, как переписать этот запрос?

5
задан mellamokb 13 May 2011 в 21:34
поделиться