Почему вы хотите поместить индекс в представление? - PullRequest
36 голосов
/ 19 января 2011

Microsoft SQL Server позволяет добавлять индекс к представлению, но зачем вам это нужно?

Насколько я понимаю, представление на самом деле является лишь подзапросом, т. Е. Если я говорю SELECT * FROM myView, я действительно говорю SELECT * FROM (MyView's Query)

Это выглядит какиндексы на базовых таблицах будут наиболее важными.Так зачем вам нужен отдельный индекс для представления?

Ответы [ 4 ]

35 голосов
/ 19 января 2011

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

По сути, ядро ​​базы данных поддерживает «решенную» версию запроса (или, скорее, индекс запроса), когда вы обновляете базовые таблицы, а затемиспользуя эту решенную версию, а не исходные таблицы, когда это возможно.

Вот хорошая статья в Database Journal.

4 голосов
/ 24 января 2011

Microsoft SQL Server позволяет добавлять индекс к представлению, но зачем вам это делать?

Для ускорения запросов.

Насколько я понимаю, представление на самом деле является просто подзапросом, то есть, если я говорю SELECT * FROM myView, я действительно говорю SELECT * FROM (MyView's Query)

Не всегда.

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

Не все виды могут быть проиндексированы.

Например, если вы используете GROUP BY в представлении, для того, чтобы оно было индексируемым, оно должно содержать COUNT_BIG и все агрегатные функции в нем должны распределяться по UNION ALL (только SUM и COUNT_BIG на самом деле). Это необходимо для того, чтобы индекс был поддерживаемым, а обновление базовых таблиц могло бы своевременно обновлять представление.

3 голосов
/ 19 января 2011

следующая ссылка содержит более точную информацию, чем я могу сказать, особенно в разделе, посвященном повышению производительности.Надеюсь, это поможет

http://technet.microsoft.com/en-us/library/cc917715.aspx

0 голосов
/ 24 января 2011

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

...