Когда SQL Server оценивает предложения where в представлении?

У меня есть представление, содержащее запрос, который может вернуть большой объем данных. Затем в моем приложении Delphi я вызываю это представление с предложением WHERE для фильтрации нужных мне результатов.

Итак, мой вопрос: когда SQL-сервер оценит это предложение where? Я имею в виду, если у меня есть следующее представление с именем getSales (это просто пример):

select * from sales

и запрос имеет:

select * from getSales where customer = :id

Что будет делать SQL-сервер?

  1. Будет ли он напрямую искать продажи с предоставленным идентификатором клиента?
  2. Или он будет искать все продажи и фильтровать их по идентификатору клиента после получения результатов?

Спасибо


person davidrgh    schedule 11.10.2013    source источник


Ответы (1)


Он будет применять предложение where к базовым данным, используя любые подходящие доступные индексы, т. е. он будет эффективным и будет искать непосредственно продажи, которые имеют идентификатор клиента, когда есть индекс по идентификатору клиента. Без индекса он потенциально мог бы выполнить сканирование таблицы.

person Jazzy J    schedule 11.10.2013
comment
В версиях до SQL Server 2008 могут возникать проблемы с производительностью из-за проталкивание предиката, но более поздние версии должны работать более или менее так, как ожидалось. - person Jazzy J; 11.10.2013
comment
В запросе, который я хочу выполнить, поля параметров являются частью первичного ключа таблицы (ПК представляет собой комбинацию идентификатора клиента и идентификатора заказа продажи, а фильтр представления зависит только от клиента) - person davidrgh; 11.10.2013
comment
Он должен использовать первичный ключ/индекс. Запустите запрос в SSMS и проверьте план выполнения, чтобы быть уверенным. - person Jazzy J; 11.10.2013