Skip to content

Сравнение обычных представлений и индексированных

Пересказ статьи Chad Callihan. Views vs. Indexed Views


Давайте рассмотрим преимущества и недостатки представлений SQL.
Запрос к нескольким таблицам можно облегчить с помощью представлений. Запрос к единственному представлению (SELECT * FROM MyView) короче по сравнению с запросом, в котором соединяется несколько таблиц для получения результата.
Представления также можно использовать для усиления безопасности, разрешая пользователям доступ только к определенным столбцам в таблицах, определенных в представлении.

За такую гибкость приходится платить, и эта плата растет с размером ваших данных. При обращении к представлению SQL Server все еще должен извлекать данные из таблиц, упомянутых в представлении. Важно то, что происходит внутри.

Вы столкнулись с тем, что узким местом в производительности запросов оказалось представление? Рассмотрите возможность создания уникального кластеризованного индекса (а затем любых дополнительных некластеризованных индексов) на представлении для улучшения производительности.

Давайте займемся физическими


Создание индексированных представлений может улучшить производительность запросов, поскольку данные сохраняются физически. Вместо проверки представления и выполнения всей работы по обработке данных, собираемых из нескольких таблиц, запросы к физически проиндексированному представлению выполняются просто как к таблице.

Но я слышал, что индексированные представления имеются только в редакции Enterprise Edition?


Вроде того. В Enterprise Edition оптимизатор запросов будет использовать индексированное представление, если сочтет это оптимальным планом. В других редакциях вы могли бы использовать хинт NOEXPAND, чтобы принудить использовать индексированное представление вместо обычного.

Посмотрите скриншот сравнительной таблицы различий в поддержке индексированных представлений в зависимости от редакции SQL Server 2019, взятой отсюда:



Создание индексированного представления


Если вы создавали индекс на таблице, тогда вы знаете, как создать индексированное представление.

Помните, что представление должно иметь опцию WITH SCHEMABINDING. Если в представлении соединяются данные, то вы увидите чтение данных из соответствующих таблиц:



Затем вы можете создать индекс и увидеть, что ваш план переходит от чтения из таблиц к чтению из индексированного представления:

CREATE UNIQUE CLUSTERED INDEX Indexed_View_Example
ON dbo.ComicPub (ReleaseDate, Comic_Title);
GO


Обратные ссылки

Нет обратных ссылок

Комментарии

Показывать комментарии Как список | Древовидной структурой

Нет комментариев.

Автор не разрешил комментировать эту запись

Добавить комментарий

Enclosing asterisks marks text as bold (*word*), underscore are made via _word_.
Standard emoticons like :-) and ;-) are converted to images.

To prevent automated Bots from commentspamming, please enter the string you see in the image below in the appropriate input box. Your comment will only be submitted if the strings match. Please ensure that your browser supports and accepts cookies, or your comment cannot be verified correctly.
CAPTCHA

Form options

Добавленные комментарии должны будут пройти модерацию прежде, чем будут показаны.