У меня есть запрос выбора с некоторыми сложными объединениями и where
условий, и для выполнения требуется ~ 9 секунд.Странное выполнение SELECT COUNT (1)
Теперь странно, если я завершу запрос select count(1)
, время выполнения резко возрастет.
SELECT COUNT(1) FROM
(
SELECT .... -- initial query, executes ~9s
)
-- executes 1min
Это очень странно для меня, так как я ожидал бы противоположный результат - двигатель SQL-сервер должен быть достаточно умны, чтобы оптимизировать внутреннее выполнение запроса (например, не выполняют вложенные запросы в предложении select
, и т.д).
И вот что показывает сравнение планов выполнения! Он говорит, что это должно быть 74% до 26% (первый - это начальный запрос, а последний обернут select count(1)
).
Но это не то, что на самом деле происходит.
Idk, если я должен опубликовать запрос сам, так как он довольно большой (если вам это нужно, просто дайте мне знать в комментариях).
Thaks вас!)
Может ... мы видим планы? – Kermit
Когда вы имеете дело с вложенными запросами, внутренний обычно влияет на результаты предложения родительского выбора. Поэтому внутренние запросы должны выполняться также перед подсчетом результатов. –
Я предполагаю, что вложенные запросы в предложении 'select' никак не влияют на результат' count (*) 'или' count (1) ', я не прав? –