2011-01-13 4 views
-1

Можно создать дубликат:
how that happen SP sql serverРазличные планы запросов к одному и тому же запросу!

привет, я получаю что-то странное. я запустил эту SQL:

SELECT Id , GameTypeId , PlayerId , BetAmount , Profit ,   
     DateAndTime 
FROM  Results 
WHERE DateAndTime >= DATEADD (DAY , -1 , SYSDATETIME())   
     AND   
     DateAndTime < SYSDATETIME() 
ORDER BY DateAndTime ASC; 

я есть noncluster индекс по дате колонке и фактическим количеством строк, которые возвращают в 672 строки из 1600016 строк в таблице. (Расчетная строка была 1)

после того, что я управлял этим SQL:

declare @d DATETIME2(7) 
set @d = DATEADD (DAY , -1 , SYSDATETIME()) 
declare @d2 DATETIME2(7) 
set @d2 = SYSDATETIME() 

SELECT Id , GameTypeId , PlayerId , BetAmount , Profit ,   
     DateAndTime FROM  Results 
WHERE DateAndTime >= @d   
     AND   
     DateAndTime < @d2 
ORDER BY DateAndTime ASC; 

и фактическое выполнение плана было СТОЛ SCANE !!! и фактическое число возвращаемых строк равно 672 строка из 1600016 строк в таблице. (оценочный ряд был 144000 r0ws)

some 1 знаете, что произошло здесь?!?!?

+1

dup? http://stackoverflow.com/questions/4679563/how-that-happen-sp-sql-server/4679665#4679665 –

+0

Просьба не удваивать сообщение – gbn

ответ

0

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

+0

Расчет 'DATEADD' не будет оцениваться каждой строкой и не будет вызвать сканирование таблицы. Формула не содержит ссылок на столбцы. Чтобы увидеть, что этот тип формулы просто оценивается после того, как вы можете попробовать создать таблицу #t (i int); INSERT INTO #t выберите CHECKSUM (NEWID())% 2 из sys.all_columns выберите i, COUNT (*) из #t группы i; выберите COUNT (*) из #t WHERE i = CHECKSUM (rand())% 2 drop table #t ' –

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