Как создать материализованные представления в SQL Server?

StackOverflow https://stackoverflow.com/questions/3986366

Вопрос

Я собираюсь спроектировать DW и услышал о материализованных взглядах. На самом деле я хочу создать представление, и он должен автоматически обновляться при изменении базовых таблиц. Кто -нибудь может объяснить с примером запроса ..

Это было полезно?

Решение

Их называют индексированные взгляды В SQL Server - прочитайте эти белые бумаги для получения дополнительной информации:

По сути, все, что вам нужно сделать, это:

  • Создавайте обычный вид
  • Создайте кластерный индекс для этой точки зрения

и вы сделали!

Сложная часть: представление должно удовлетворить довольно много ограничений и ограничений - они изложены в белой бумаге. Если вы сделаете это - это все, что есть. Представление обновляется автоматически, не требуется техническое обслуживание.

Дополнительные ресурсы:

Другие советы

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

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

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

Я буду рад услышать некоторые реальные сценарии, в которых люди фактически использовали индексированные взгляды на свою пользу и не могли бы сделать без них

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

MVIEW - это, по сути, снимок данных из другого источника. В отличие от просмотра, данные не найдены, когда вы запросите представление, он хранится локально в форме таблицы. MVIEW обновляется с использованием фоновой процедуры, которая начинается через регулярные промежутки времени или при изменении исходных данных. Oracle допускает полное или частичное обновление.

В SQL Server я бы использовал следующее для регулярного создания MVIEW для (полного) обновления.

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

Все остальное - эксперименты.

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

select * into cachetablename from myviewname
alter table cachetablename add primary key (columns)
-- OR alter table cachetablename add rid bigint identity primary key
create index...

Затем SP_RENAME View/Table или измените любые запросы или другие представления, которые ссылаются на его, чтобы указывать на таблицу кеша.

Расписание ежедневно/ночью/еженедельно/

begin transaction
truncate table cachetablename
insert into cachetablename select * from viewname
commit transaction

NB: Это будет съесть пространство, также в ваших журналах TX. Лучше всего использовать для небольших наборов данных, которые медленно вычисляют. Может быть, рефактор, чтобы устранить «легкие, но большие» столбцы сначала во внешнее представление.

Для MS T-SQL Server я предлагаю изучить индекс с оператором «включить». Уникальность не требуется, ни физическая сортировка данных, связанных с кластерным индексом. «Индекс ... include ()» создает отдельное хранение физических данных, автоматически поддерживаемое системой. Это концептуально очень похоже на Oracle Materialized View.

https://msdn.microsoft.com/en-us/library/ms190806.aspx

https://technet.microsoft.com/en-us/library/ms189607(v=sql.105).aspx

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top