ГДЕ больше заданной даты и времени, чтобы уменьшить количество запрошенных строк

У меня есть хранимая процедура, которая ищет строки в таблице на основе заданного текста. TableWithText имеет столбец SomeText типа nvarchar, а также столбец CreateDate DateTime, заполненный датой и временем создания строки.

Тело хранимой процедуры таково:

SELECT TableWithTextID, SomeOtherColumn 
FROM TableWithText 
WHERE SomeText = @inputText

Значение SomeText для каждого гарантируется уникальным, хотя такое ограничение не накладывается. Поэтому ожидается, что этот оператор вернет только одну строку.

Однако в таблице около 500 000 строк. Учитывая, что я знаю, когда была введена искомая строка (с точностью до минуты), если я добавлю

AND CreateDate >= @CreateDate

к хранимой процедуре, уменьшит ли оптимизатор запросов MS SQL количество строк запроса до тех, которые были созданы после @CreateDate, прежде чем он будет искать входной текст?


person Adam Danebak    schedule 26.03.2015    source источник
comment
Когда вы говорите reduce the amount of query rows, вы имеете в виду набор результатов или количество строк, которые он просматривает, чтобы найти строку со значением столбца @inputText?   -  person Cameron    schedule 26.03.2015
comment
Я имею в виду количество строк, которые он просматривает, прежде чем найдет это совпадение.   -  person Adam Danebak    schedule 27.03.2015


Ответы (2)


Лучше всего просмотреть план выполнения и посмотреть, что вам говорит оптимизатор. Вы можете подумать, что есть проблема, просто взглянув на запрос и количество строк, но фактическая стоимость довольно низкая.

Если у вас уже есть индекс для CreateDate, добавьте его в предложение where, и он должен воспользоваться этим.

В противном случае вам лучше проиндексировать поле SomeText, если это то, что часто выполняется, и вы замечаете полное сканирование таблицы при выполнении этого. Я предполагаю, что он используется в других запросах два, учитывая, что это уникальная вещь?

person Brian Dishaw    schedule 26.03.2015

Да, потенциально, но только если вы добавите индекс в столбец CreateDate (или индекс в SomeText, CreateDate)

person ErikEJ    schedule 26.03.2015
comment
Нет, если в столбце SomeText есть индекс - person D Stanley; 27.03.2015