OPTION (RECOMPILE) всегда быстрее; Почему?
Я столкнулся со странной ситуацией, когда добавлениеOPTION (RECOMPILE)
мой запрос приводит к тому, что он выполняется за полсекунды, а если его опустить, запрос занимает более пяти минут.
Это тот случай, когда запрос выполняется из Query Analyzer или из моей программы на C # черезSqlCommand.ExecuteReader()
, Звонить (или не звонить)DBCC FREEPROCCACHE
или жеDBCC dropcleanbuffers
не имеет значения; Результаты запроса всегда возвращаются мгновенно сOPTION (RECOMPILE)
и больше пяти минут без него. Запрос всегда вызывается с одинаковыми параметрами [ради этого теста].
Я использую SQL Server 2008.
Я довольно удобно писать SQL, но никогда не использовалOPTION
Команда в запросе раньше и была незнакома с всей концепцией плана кеширования до сканирования постов на этом форуме. Мое понимание из постов заключается в том, чтоOPTION (RECOMPILE)
это дорогая операция. По-видимому, это создает новую стратегию поиска для запроса. Так почему же тогда последующие запросы, которые опускаютOPTION (RECOMPILE)
так медленно? Разве последующие запросы не должны использовать стратегию поиска, которая была вычислена на предыдущем вызове, который включал подсказку перекомпиляции?
Весьма необычно иметь запрос, который требует подсказки перекомпиляции при каждом вызове?
Извините за вопрос начального уровня, но я не могу этого сделать.
ОБНОВЛЕНИЕ: меня попросили опубликовать запрос ...
select acctNo,min(date) earliestDate
from(
select acctNo,tradeDate as date
from datafeed_trans
where feedid=@feedID and feedDate=@feedDate
union
select acctNo,feedDate as date
from datafeed_money
where feedid=@feedID and feedDate=@feedDate
union
select acctNo,feedDate as date
from datafeed_jnl
where feedid=@feedID and feedDate=@feedDate
)t1
group by t1.acctNo
OPTION(RECOMPILE)
При запуске теста из Query Analyzer я добавляю следующие строки:
declare @feedID int
select @feedID=20
declare @feedDate datetime
select @feedDate='1/2/2009'
При вызове из моей программы на C # параметры передаются черезSqlCommand.Parameters
свойство.
В целях этого обсуждения вы можете предположить, что параметры никогда не изменяются, поэтому мы можем исключить неоптимальный запах параметра в качестве причины.