Может кто-нибудь, пожалуйста, объясните мне на простом английском языке, как работает индекс в представлении? У меня довольно простое понимание индексов на таблицах; как бы индексирование представления работало иначе, чем просто дать индексы на базовых таблицах делать свою вещь естественным образом?Как индексы работают над представлениями?
ответ
Допустим, есть мнение, что ограничивает таблицу определенных строк:
create view dbo.vw_HotProducts
as
select * from dbo.Products where Hot = 1
Теперь, если вы создаете индекс с этой точки зрения, индекс содержит только горячие продукты. Вы можете сравнить его с сохранением результата представления во временной таблице. Это может быть очень полезно для сложных запросов с несколькими объединениями; в основном их выход кэшируется.
Большой недостаток индексированных представлений заключается в том, что они воссоздаются каждый раз, когда изменяются основные данные таблицы. Это ограничивает использование индексированных представлений данными, которые не часто меняются, как правило, в хранилище данных или в среде бизнес-аналитики.
См http://msdn.microsoft.com/en-us/library/aa258260(SQL.80).aspx
Создание уникального кластерного индекса по зрения повышает производительность запросов , поскольку представление хранится в базе данных таким же образом, таблица с кластерный индекс хранится.
Вид превращается из надлежащего вида в таблицу. Определение определения используется для обновления этой таблицы.
Oracle называет эти «материализованные виды».
, и поскольку индексированное представление теперь действительно является поддерживаемой системой таблицей, можно также создать дополнительные некластеризованные индексы на нем. –
Оба: вы * можете * создавать индексы NC на представлении. Я делаю это .. – gbn
Похоже, что 1-й созданный вами индекс должен быть уникальным и сгруппирован для определения таблицы кеша. Дополнительные индексы могут быть неповторимыми, например marc_s! – Andomar
Взгляд сам по себе не является реальным или «сохраняется» и не имеет преимущества в производительности. Это просто макрос that's expanded.
Добавить индекс, и он физически существует (сохраняется), поэтому оптимизатор рассмотрит его использование. Тогда это не макрос.
Я уверен, что Oracle называет их «материализованными представлениями», которые являются лучшим именем.
Связанная FYI: вычисляемый столбец имеет PERSISTED вариант, который делает то же самое ...
+1 для FYI - спасибо –
мы можем создать индекс, основанный на (неключевых) колонке зрения? –
@ Q8-coder: индекс в представлении должен быть кластеризованным и уникальным. Таким образом, вы можете выбрать неявный столбец, если он однозначно идентифицирует строку в результате представления – Andomar
@Andomar: неверно, что индексированное представление воссоздается при любых изменениях данных. SQL Server изменит материализованное представление, чтобы отразить любые изменения в базовых таблицах. Вот почему SQL Server устанавливает так много ограничений на то, какие представления могут быть реализованы: несколько агрегатов, отсутствие внешних соединений, отсутствие объединений, отсутствие самостоятельных подключений и т. Д. Конечно, он только изменяет данные через INSERT/DELETE, а не UPDATE. Но я видел, что индексированные представления успешно используются в приложении OLTP, соединяющем таблицы с миллионами строк. YMMV – Tadmas