Помимо возможного увеличения производительности при использовании сложных представлений, которые обычно присутствуют в запросах, применение индексированных представлений имеет два других преимущества:
♦ индекс представления может быть использован, даже если в представлении явно не указана ссылка на предложение from;
♦ все изменения данных отражаются в соответствующих индексированных представлениях.
Возможно, наиболее важным свойством индексированных представлений является то, что у запроса в представлении нет явного указания на использование индекса в этом представлении. Иными словами, если запрос содержит ссылку на столбцы базовой таблицы (таблиц), которые также существуют в индексированных представлениях, и оптимизатор принимает решение, что использование этого индексированного представления является лучшим выбором, то он выбирает индексы представления точно тем же способом, каким он выбирает индексы таблицы, когда они явно не указаны в запросе.
Когда вы создаете индексированное представление, результирующий набор этого представления (в момент создания индекса) сохраняется на диске. Поэтому все данные, которые изменяются в базовой таблице (таблицах), также будут изменяться в соответствующем результирующем наборе индексированного представления.
Помимо всех преимуществ, которые вы можете получить при использовании индексированных представлений, также существуют и (возможные) недостатки: поддержка индексов в индексированных представлениях является более сложной, чем индексов в базовых таблицах, потому что структура уникального кластеризованного индекса в индексированном представлении более сложная, чем структура соответствующего индекса для базовой таблицы.
Следующие типы запросов могут иметь значительные преимущества в производительности, если представление, которое используется в соответствующем запросе, является индексированным:
♦ запросы, которые обрабатывают множество строк и содержат операторы соединения или агрегатные функции;
♦ операции соединения и агрегатные функции, которые часто выполняются в одном или нескольких запросах.
Если запрос ссылается на стандартное представление, и система баз данных должна обработать много строк с помощью операции соединения, то оптимизатор обычно использует субоптимальный метод соединения. Однако если вы определяете кластеризованный индекс для такого представления, то производительность запроса может быть значительно улучшена, потому что оптимизатор может использовать подходящий метод. То же самое истинно и для агрегатных функций.
Если запрос, который ссылается на стандартное представление, не обрабатывает много строк, то использование индексированного представления все равно может дать преимущества, если запрос используется достаточно часто. То же самое истинно и для групп запросов, которые применяют соединения этих таблиц или используют те же типы агрегатов.
Если ограничения на типы представлений, которые могут быть индексированы, не дают вам возможности использовать индексированное представление в конкретном запросе, постарайтесь создать частичные решения - каждое с соответствующим индексированным представлением - и после этого объедините все частичные решения в единое. Например, вы не можете спроектировать индексированное представление для обработки агрегатов данных в таблицах из разных баз данных с последующим соединением их результатов, потому что индексированное представление не может ссылаться на таблицы из нескольких баз данных. Вы можете, тем не менее, создать индексированное представление для каждой базы данных, которое выполняет агрегирование данных. Если оптимизатор может найти соответствующее индексированное представление для частичных запросов, то, по крайней мере, процессы агрегирования будут выполняться быстрее. Хотя обработка соединения не будет выполняться быстрее, общий запрос будет выполнен быстрее, потому что он использует агрегатные данные, сохраненные в индексированном представлении.