Опция Recompile делает запрос быстрым - хорошо или плохо? - PullRequest
7 голосов
/ 25 ноября 2010

У меня есть два SQL-запроса, каждый из которых содержит около 2-3 внутренних соединений.Мне нужно сделать INTERSECT между ними.

Проблема в том, что индивидуально запросы работают быстро, но после пересечения в общей сложности требуется около 4 секунд.

Теперь, если я добавлю OPTION (RECOMPILE)в конце всего этого запроса этот запрос снова работает отлично и работает довольно быстро, возвращая почти мгновенно! *

Я понимаю, что повторная компиляция параметра вызывает перестройку плана выполнения, поэтому я сейчас растерялся, если мой более ранний запрос занял 4секунд лучше или теперь с перекомпиляцией, но лучше взять 0 секунд.

Ответы [ 2 ]

5 голосов
/ 25 ноября 2010

Вместо того, чтобы отвечать на вопрос, который вы задали, вот что вы должны сделать:

Обновите свою статистику:

EXEC sp_updatestats

Если это не сработает, перестройте индексы.

Если это не сработает, посмотрите на ОПТИМИЗИРОВАТЬ ДЛЯ

5 голосов
/ 25 ноября 2010

С указанием RECOMPILE SQL Server не кэширует план для этой хранимой процедуры, хранимая процедура перекомпилируется при каждом ее выполнении.

Каждый раз, когда хранимая процедура запускается в SQL Server в первый раз,он оптимизирован, и план запроса компилируется и кэшируется в памяти SQL Server.Каждый раз, когда одна и та же хранимая процедура запускается после ее кэширования, она будет использовать один и тот же план запросов, что исключает необходимость оптимизации и компиляции одной и той же хранимой процедуры при каждом ее запуске.Поэтому, если вам нужно запускать одну и ту же хранимую процедуру 1000 раз в день, можно сэкономить много времени и аппаратных ресурсов, и SQL Server не нужно будет работать так усердно.

вам не следует использоватьэта опция , поскольку при использовании этой опции вы теряете большинство преимуществ, которые вы получаете, заменяя запросы SQL хранимыми процедурами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...