2013-04-18 5 views
2

Я могу создать кластерный или некластеризованный индекс в представлении, и SQL SERVER говорит, что мы можем иметь несколько некластеризованных индексов (макс. 249), но только один кластерный индекс существует на столе или в представлении. Потому что записи сортируются, где они физически хранятся, и мы не можем иметь несколько порядков сортировки. Итак, мой вопрос заключается в том, что View не физически хранится в базе данных. Затем, если я создаю кластерный индекс в представлении и базовой таблице, уже существует кластеризованный индекс. Как внедрен кластерный индекс? Как кластеризованный индекс работает и полезен для просмотра?как кластеризованный индекс реализован в представлении

ответ

3

Вид представляет собой только сохраненный запрос без материализованных данных , если не имеет кластеризованного индекса.

Во многих случаях люди думают, что любой старый вид можно «ускорить», добавив кластерный индекс. Это очень редко. Как правило, вы создаете индексированный вид для предварительной агрегации определенных вычислений, таких как SUM или COUNT_BIG. Если вы создаете индексированное представление, которое не агрегирует и, следовательно, имеет такое же количество строк/страниц, что и базовая таблица, вы ничего не достигли (конечно, как и все, есть исключения - индекс в представлении может быть более тонкий, чем базовый стол, например, что приводит к меньшему количеству страниц).

В качестве отложенного вы не можете создать некластеризованный индекс при просмотре , если только вы не создадите кластерный индекс. И вы также должны иметь в виду, что, как индексы на таблице, индексированный вид равен , а не. Хотя это может ускорить выполнение некоторых запросов, SQL Server должен поддерживать индекс на протяжении всей рабочей области DML.

Вы действительно должны прочитать documents like this one, в котором более подробно рассказывается о преимуществах производительности индексированных представлений и this one, в которых, среди прочего, указаны ограничения и ограничения.

+0

из вашей первой строки, когда мы создаем кластерный индекс на представлении, этот вид становится материализованным, или мы можем создавать кластерный индекс только на материализованном представлении? – Ravi

+0

Вид создается, когда вы создаете на нем кластерный индекс. –

+0

, так как я помечен sql-сервером на моем посту, так что я задаю еще один вопрос, имеет ли sql-сервер материализованное представление? – Ravi

3

Кластеризованный индекс в представлении - это, в основном, новая таблица, которая автоматически обновляется при изменении таблиц с привязкой. Таким образом, вы покупаете более быстрое время доступа с предварительно собранными данными, но вы платите за использование хранилища значительно выше (вдвое больше).

0

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

Вы можете прочитать больше от this blog.