MYSQL: почему время ORDER BY отличается для двух почти одинаковых запросов - PullRequest
3 голосов
/ 02 декабря 2011
SELECT *
FROM `resumes` AS r
LEFT JOIN seeker_data_cached AS c ON r.user_id = c.user_id
ORDER BY r.user_id

SELECT *
FROM `resumes` AS r
LEFT JOIN seeker_data_cached AS c ON r.user_id = c.user_id
ORDER BY c.user_id

r.user_id и c.user_id проиндексированы. Почему эти запросы имеют разное время выполнения и можно ли что-нибудь сделать для ускорения второго запроса?

1 Ответ

0 голосов
/ 02 декабря 2011

Документация MySQL содержит раздел по ORDER BY оптимизации , в котором в самом верху есть маркированный список вещей, которые нужно проверить, когда производительность не соответствует вашим ожиданиям.Итак, первым делом можно пройти через этот список.

Многие из них мы можем исключить на основании предоставленной вами информации, но многие из них связаны с вещами, которые мы не знаем из вашего вопроса, но которые вы, вероятно, знаете.

Если это не поможет, выполните оба запроса через EXPLAIN, и это может сказать вам, почему производительность одного отличается от другого.

Я был бы склонен посмотреть, что произойдет, если вы измените ON r.user_id = c.user_id во втором запросе на ON c.user_id = r.user_id, основываясь на битах в документации, указанной выше, где говорится о ситуации, когда "[t] онКлюч, используемый для извлечения строк, не совпадает с ключом, используемым в ORDER BY ".

...