2015-05-11 3 views
3

У меня есть таблица с примерно 1,5 миллионами строк с date_run индексируется без кластера. Запрос № 1 занимает 0 секунд, а запрос № 2 занимает 3 секунды. Может кто-нибудь объяснить, почему запрос №2 работает медленнее. Я также включил планы выполнения для обоих. Sql сервер версии 2014.Почему выбор даты медленный

запрос # 1

select avg14gain 
from stocktrack 
where 
date_run >= '2013-3-21' 
and date_run < '2013-3-22' 

Valid XHTML http://biginkz.com/Pics/DateHardCoded.jpg.

запрос # 2

declare @today date 
declare @yesterday date 
set @today='2013-3-22' 
set @yesterday='2013-3-21' 
select avg14gain 
from stocktrack 
where 
date_run >= @yesterday 
and b.date_run <@today 

Valid XHTML http://biginkz.com/Pics/DataAsigned.jpg.

+2

Что 'b' в' b.date_run'? –

+0

Запрос 1 выполняет поиск индекса, запрос 2 выполняет сканирование таблицы. Это означает, что второй запрос должен читать каждую строку в таблице, а первый запрос - только чтение строк из индекса. –

+4

Да, но почему это делает сканирование таблицы? date_run индексируется. Эти два запроса практически одинаковы, за исключением того, что # 1 - это дата с жесткой привязкой и # 2. – user3690095

ответ

0

Я не уверен, почему ваш запрос не подбирает индекс, но вы можете использовать index hint.

попробовать что-то вроде этого:

declare @today date 
declare @yesterday date 
set @today='2013-3-22' 
set @yesterday='2013-3-21' 
select avg14gain 
from stocktrack 
where 
date_run >= @yesterday 
and b.date_run <@today 
with (index([stocktrack].[ix_drun])) 

также вы можете попробовать то, что предлагается в этом посте: TSQL not using indexes. См. Ответ @Justin Dearing (перестроить индекс/обновить статистику).

+0

Мне не нравится использовать подсказки индекса о вероятности того, что индекс может измениться позже и сломается, если это произойдет. – Zane

+0

Я оптимизировал запрос, используя (index ([стоковая трасса]. [Ix_drun])). Это быстрее, но все еще занимает 2 секунды из-за сортировки в плане выполнения. Как я могу избавиться от сортировки в этом плане выполнения? – user3690095

+0

Вы также можете добавить подсказку [https://technet.microsoft.com/en-us/library/ms190727 (v = sql.105) .aspx). В этот момент я предпочел бы использовать [@pmbAustin] (http://stackoverflow.com/users/594448/pmbaustin) решение из столбцов [INCLUDE] (https://msdn.microsoft.com/en-us/ библиотека/ms190806.aspx) по индексу. – Pio

0

Создайте индекс на date_run с помощью avg14gain как столбец INCLUDE этого индекса. Таким образом, весь запрос может быть удовлетворен от одного индекса, и оптимизатор увидит это.

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