Я использую отслеживание изменений в SQL2008 R2 и вижу очень странное поведение при попытке определить строки, затронутые в пакете, сохраненный процесс занимает ~ 30 секунд для запуска при использовании значения параметра, но когда я помещаю литеральные значенияв вызове функции CHANGETABLE она возвращается через <1 с. </p>
Вызов следующего занимает ~ 30 с:
DECLARE @sync_last_received_anchor BigInt;
DECLARE @sync_new_received_anchor BigInt;
SET @sync_last_received_anchor = 272361;
SET @sync_new_received_anchor = 273361;
SELECT [Customer].[CustomerID]
FROM dbo.tblCustomer AS [Customer] WITH (NOLOCK)
INNER JOIN CHANGETABLE(CHANGES [REDACTED].[dbo].[tblCustomer], @sync_last_received_anchor) AS [theChangeTable]
ON [theChangeTable].[CustomerID] = [Customer].[CustomerID]
WHERE ([theChangeTable].[SYS_CHANGE_OPERATION] = 'U'
AND [theChangeTable].[SYS_CHANGE_VERSION] <= @sync_new_received_anchor
)
Однако изменение строки CHANGETABLE, как показано ниже, уменьшает ее до ~1с.
INNER JOIN CHANGETABLE(CHANGES [REDACTED].[dbo].[tblCustomer], 272361) AS [theChangeTable]
Поскольку мы запускаем SP1, я предполагаю, что исправление, выпущенное в SQL2008 CU4 для медленного изменения CHANGETABLE, было исправлено (http://support.microsoft.com/kb/2276330).
, хотя я в замешательстве, почему меняю параметрли буквальное значение будет иметь такое большое значение?