2013-09-18 2 views
1

У меня есть запрос выбора с некоторыми сложными объединениями и 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 вас!)

+6

Может ... мы видим планы? – Kermit

+1

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

+0

Я предполагаю, что вложенные запросы в предложении 'select' никак не влияют на результат' count (*) 'или' count (1) ', я не прав? –

ответ

1

Когда вы используете count(1) вам больше не нужны все столбцы.

Это означает, что SQL Server может рассматривать разные планы выполнения с использованием более узких индексов, которые не охватывают все столбцы, используемые в списке исходного запроса SELECT.

Обычно это должно, конечно, привести к более компактному, более быстрому исполнению, однако, похоже, в этом случае вам не повезло, а это не так.

Возможно, вы найдете узел с большим расхождением между фактическими и оцененными строками - этот вид будет распространяться в плане и может привести к выбору оптимальных вариантов стратегии для других подребер (например, под оптимальные порядковые порядки или алгоритмы)

Смежные вопросы