Лучше ли заказать представление, чем запрос, вызывающий его? - PullRequest
1 голос
/ 03 апреля 2012

Я использую SQL Server 2008, и у меня возникает ситуация, когда я вижу, что в коде моего приложения я всегда упорядочиваю по дате, содержащейся в нем, поэтому мне было интересно узнать об эффективности и т. Д.

Я сталкивался с этимсообщение в блоге SQL Server - Заказать представление , в котором объясняется, что можно заказать представление так:

CREATE VIEW v
AS
    SELECT a,b,d FROM t
GO
SELECT a,b,d FROM v ORDER BY d

Я мог бы сделать:

CREATE VIEW v
AS
    SELECT TOP(100) PERCENT a,b,d FROM t ORDER BY d
GO
SELECT a,b,d FROM v

и получить тот же результат.

Мой вопрос: что из вышеперечисленного является более эффективным?

Если я хочу, чтобы это было как можно быстрее, мне лучше было бы воспользоваться вторым подходом, или это не имеет значения, и сервер sql будет работать все одинаково независимо?

Ответы [ 3 ]

5 голосов
/ 03 апреля 2012

Это спорный вопрос :

Предложение ORDER BY недопустимо в представлениях , встроенные функции, производные таблицы и подзапросы

Уловка использования TOP(100) PERCENT - плохая практика. Попытка навязать порядок путем добавления ORDER BY к представлению действительно приводит к неправильному отображению дерева. Если вам нужен ORDER BY, попросите об этом в запросе. конец истории.

1 голос
/ 03 апреля 2012

дополняет ответ Remus, если у вас есть представление v, подобное вашему, которое содержит:

SELECT a,b,d FROM t

после того, как вы сделаете

SELECT a,b,d FROM v ORDER BY d

вы на самом деле делаете

SELECT a,b,d FROM t ORDER BY d

, потому что обычное (неиндексированное) представление существует только как s-оператор SQL в БД, поэтому, как только SQL увидит select * from view,он заменяется определением представления перед созданием плана выполнения, который будет запущен

0 голосов
/ 03 апреля 2012

Я ожидаю, что производительность будет примерно одинаковой для обоих из них - во всяком случае, выбор из более простой версии представления может быть немного быстрее, так как два запроса по существу идентичны, но более сложная версия запроса включает в себя Обработка TOP N, а также сортировка.

Самый верный способ найти ответ - попробовать и посмотреть.

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