Индексированный просмотр (Indexed View, материализованное представление с индексом) — это представление (VIEW), для которого создан кластерный уникальный индекс. Это позволяет физически хранить результаты запроса на диске и использовать индекс для ускорения доступа.
Преимущества:
Ограничения:
TEXT, NTEXT, IMAGE типы данных, некоторые функции).CREATE VIEW dbo.SalesSummary WITH SCHEMABINDING AS SELECT SalesPersonID, COUNT_BIG(*) AS SalesCount, SUM(TotalDue) AS TotalDue FROM dbo.Sales GROUP BY SalesPersonID; GO CREATE UNIQUE CLUSTERED INDEX idx_SalesSummary ON dbo.SalesSummary (SalesPersonID);
В: Все ли представления позволяют создать на себе индекс (кластерный)?
A: Нет, индексировать можно только такие VIEW, которые полностью отвечают ограничениям (например, нет внешних ссылок, агрегатные функции согласованы и др.). В противном случае запрос создания индекса выдаст ошибку.
История
На реальном проекте в банковской системе требовалось ускорить выборки по агрегированным отчетам. Создали индексированный VIEW без анализа нагрузки на обновление таблиц. При массовых операциях вставки производительность основной таблицы резко просела из-за значительных затрат на обновление индекса представления.
История
Специалист ошибочно полагал, что можно индексировать VIEW с указанным JOIN на внешнюю таблицу и функцию GETDATE(). Запрос создания индекса завершился с ошибкой "Cannot create index on view with non-deterministic functions". Был потрачен день на исправление проектной архитектуры.
История
В крупном e-commerce проекте обновление данных в базовой таблице "Products" стало причиной появившихся блокировок. Причина — некорректное управление транзакциями при наличии большого индексированного VIEW, в который агрегация затрагивала миллионы строк.