2009-11-12 1 views
14

Может кто-нибудь, пожалуйста, объясните мне на простом английском языке, как работает индекс в представлении? У меня довольно простое понимание индексов на таблицах; как бы индексирование представления работало иначе, чем просто дать индексы на базовых таблицах делать свою вещь естественным образом?Как индексы работают над представлениями?

ответ

8

Допустим, есть мнение, что ограничивает таблицу определенных строк:

create view dbo.vw_HotProducts 
as 
select * from dbo.Products where Hot = 1 

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

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

+0

мы можем создать индекс, основанный на (неключевых) колонке зрения? –

+0

@ Q8-coder: индекс в представлении должен быть кластеризованным и уникальным. Таким образом, вы можете выбрать неявный столбец, если он однозначно идентифицирует строку в результате представления – Andomar

+2

@Andomar: неверно, что индексированное представление воссоздается при любых изменениях данных. SQL Server изменит материализованное представление, чтобы отразить любые изменения в базовых таблицах. Вот почему SQL Server устанавливает так много ограничений на то, какие представления могут быть реализованы: несколько агрегатов, отсутствие внешних соединений, отсутствие объединений, отсутствие самостоятельных подключений и т. Д. Конечно, он только изменяет данные через INSERT/DELETE, а не UPDATE. Но я видел, что индексированные представления успешно используются в приложении OLTP, соединяющем таблицы с миллионами строк. YMMV – Tadmas

5

См http://msdn.microsoft.com/en-us/library/aa258260(SQL.80).aspx

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

Вид превращается из надлежащего вида в таблицу. Определение определения используется для обновления этой таблицы.

Oracle называет эти «материализованные виды».

+2

, и поскольку индексированное представление теперь действительно является поддерживаемой системой таблицей, можно также создать дополнительные некластеризованные индексы на нем. –

+0

Оба: вы * можете * создавать индексы NC на представлении. Я делаю это .. – gbn

+0

Похоже, что 1-й созданный вами индекс должен быть уникальным и сгруппирован для определения таблицы кеша. Дополнительные индексы могут быть неповторимыми, например marc_s! – Andomar

6

Взгляд сам по себе не является реальным или «сохраняется» и не имеет преимущества в производительности. Это просто макрос that's expanded.

Добавить индекс, и он физически существует (сохраняется), поэтому оптимизатор рассмотрит его использование. Тогда это не макрос.

Я уверен, что Oracle называет их «материализованными представлениями», которые являются лучшим именем.

Связанная FYI: вычисляемый столбец имеет PERSISTED вариант, который делает то же самое ...

+0

+1 для FYI - спасибо –

 Смежные вопросы

  • Нет связанных вопросов^_^