Да , представлениям может быть назначен кластеризованный индекс, и, когда они это сделают, они будут хранить временные результаты, которые могут ускорить выполнение запросов.
Обновление: по крайней мере три человека проголосовали против меня по этому. При всем уважении, я думаю, что они просто неправы; Из собственной документации Microsoft очень ясно видно, что Views может повысить производительность.
Во-первых, простые представления расширяются и не вносят непосредственного вклада в повышение производительности - это правда. Однако индексированные представления могут значительно повысить производительность.
Позвольте мне перейти непосредственно к документации:
После создания уникального кластеризованного индекса в представлении результирующий набор представления немедленно материализуется и сохраняется в физическом хранилище в базе данных, что экономит накладные расходы на выполнение этой дорогостоящей операции во время выполнения.
Во-вторых, эти индексированные представления могут работать , даже если на них нет прямой ссылки из другого запроса , так как оптимизатор будет использовать их вместо ссылки на таблицу, когда это необходимо.
Опять документация:
Индексированное представление может использоваться при выполнении запроса двумя способами. Запрос может ссылаться на индексированное представление напрямую, или, что более важно, оптимизатор запросов может выбрать представление, если он определит, что представление может заменить часть или весь запрос в плане запроса с наименьшей стоимостью. Во втором случае вместо базовых таблиц и их обычных индексов используется индексированное представление. На представление не нужно ссылаться в запросе, чтобы оптимизатор запросов использовал его во время выполнения запроса. Это позволяет существующим приложениям извлекать выгоду из вновь созданных индексированных представлений без изменения этих приложений.
Эту документацию, а также диаграммы, демонстрирующие улучшения производительности, можно найти здесь .
Обновление 2: ответ подвергся критике на том основании, что именно «индекс» обеспечивает преимущество в производительности, а не «представление». Однако это легко опровергнуть.
Допустим, мы являемся компанией-разработчиком программного обеспечения в маленькой стране; Я буду использовать Литву в качестве примера. Мы продаем программное обеспечение по всему миру и храним наши записи в базе данных SQL Server. Мы очень успешны, и через несколько лет у нас более 1 000 000 записей. Однако нам часто приходится сообщать о продажах для целей налогообложения, и мы находим, что мы продали только 100 копий нашего программного обеспечения в нашей стране. Создав индексированное представление только литовских записей, мы получаем нужные нам записи в индексированном кэше, как описано в документации MS. Когда мы запустим наши отчеты о продажах в Литве в 2008 году, наш запрос будет искать по индексу с глубиной всего 7 (Log2 (100) с некоторыми неиспользованными листьями). Если бы мы делали то же самое без VIEW и просто полагались на индекс в таблице, нам пришлось бы обходить дерево индексов с глубиной поиска 21!
Очевидно, что само представление обеспечит нам преимущество в производительности (в 3 раза) по сравнению с простым использованием только индекса. Я пытался использовать пример из реальной жизни, но вы заметите, что простой список продаж в Литве даст нам еще большее преимущество.
Обратите внимание, что я просто использую прямое b-дерево для моего примера. Хотя я совершенно уверен, что SQL Server использует какой-то вариант b-дерева, я не знаю деталей. Тем не менее, точка имеет место.
Обновление 3: Возник вопрос о том, использует ли индексированное представление только индекс, размещенный в базовой таблице. То есть, перефразируя: «индексированное представление - это просто эквивалент стандартного индекса, и оно не предлагает ничего нового или уникального для представления». Конечно, если бы это было правдой, то приведенный выше анализ был бы неверным! Позвольте мне привести цитату из документации Microsoft, которая демонстрирует, почему я считаю эту критику недействительной или правдивой:
Использование индексов для повышения производительности запросов - не новая концепция; однако индексированные представления обеспечивают дополнительные преимущества в производительности, которых невозможно достичь с помощью стандартных индексов.
Вместе с приведенной выше цитатой относительно сохранения данных в физическом хранилище и другой информации в документации о том, как создаются индексы в представлениях, я думаю, можно с уверенностью сказать, что индексированное представление - это , а не кэшированный SQL Select, который использует индекс, определенный в главной таблице. Таким образом, я продолжаю придерживаться этого ответа.