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


Trackbacks

No Trackbacks

Comments

Display comments as Linear | Threaded

No comments

The author does not allow comments to this entry

Add Comment

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

Submitted comments will be subject to moderation before being displayed.