SQL Server обрабатывается вечно, когда я использую локальную переменную вместо прямого указания даты? - PullRequest
0 голосов
/ 14 августа 2010

Я заранее прошу прощения за мою новизну!Использование SQL Server 2005 (9.00.4053.00).

Для выполнения этого запроса требуется 2:22:

DECLARE @Start_date CHAR(10);
SET @Start_date = '2010-07-01';

SELECT 
    DATEPART(wk, rp.dtScanDate) AS 'Week Number',
    COUNT(rp.qwImageID) AS 'Documents',
    SUM(CAST(rp.iCompressedSize AS BIGINT))/1024/1024 AS 'Compressed',
    SUM(CAST(rp.iUncompressedSize AS BIGINT))/1024/1024 AS 'Uncompressed'
INTO [#TempRVOSPolicy]
FROM
    Policy rp
WHERE
    dtScanDate >= @Start_date
GROUP BY 
    DATEPART(wk, rp.dtScanDate)
ORDER BY
    DATEPART(wk, rp.dtScanDate);

Но для выполнения этого требуется 0:00:

DECLARE @Start_date CHAR(10);
SELECT 
    DATEPART(wk, rp.dtScanDate) AS 'Week Number',
    COUNT(rp.qwImageID) AS 'Documents',
    SUM(CAST(rp.iCompressedSize AS BIGINT))/1024/1024 AS 'Compressed',
    SUM(CAST(rp.iUncompressedSize AS BIGINT))/1024/1024 AS 'Uncompressed'
INTO [#TempRVOSPolicy]
FROM
    Policy rp
WHERE
    dtScanDate >= '2010-07-01'
GROUP BY 
    DATEPART(wk, rp.dtScanDate)
ORDER BY
    DATEPART(wk, rp.dtScanDate);

Почему это?

Ответы [ 3 ]

1 голос
/ 14 августа 2010

что происходит, когда вы делаете это?

DECLARE @Start_date datetime;
SET @Start_date = '20100701';
1 голос
/ 14 августа 2010

Взгляните на план запросов, который генерирует SQL Server.

Я предполагаю, что оптимизатор запросов оптимизирует приведение от char (10) к datetime (делает это один раз) во втором запросе, тогда как ему нужно привести значение один раз для каждой строки в первом.

0 голосов
/ 14 августа 2010

Если вы всегда запускаете один запрос за другим, он может вернуть вам обналиченный результат (для второго запроса) ...

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