Как создать материализованные представления в SQL Server?
-
10-10-2019 - |
Вопрос
Я собираюсь спроектировать DW и услышал о материализованных взглядах. На самом деле я хочу создать представление, и он должен автоматически обновляться при изменении базовых таблиц. Кто -нибудь может объяснить с примером запроса ..
Решение
Их называют индексированные взгляды В SQL Server - прочитайте эти белые бумаги для получения дополнительной информации:
- Создание индексированного представления
- Повышение производительности с помощью индексированных представлений SQL Server 2008
По сути, все, что вам нужно сделать, это:
- Создавайте обычный вид
- Создайте кластерный индекс для этой точки зрения
и вы сделали!
Сложная часть: представление должно удовлетворить довольно много ограничений и ограничений - они изложены в белой бумаге. Если вы сделаете это - это все, что есть. Представление обновляется автоматически, не требуется техническое обслуживание.
Дополнительные ресурсы:
Другие советы
Несмотря на то, что с точки зрения инженерии, индексированные взгляды звучат так, как то, что каждый мог бы использовать для повышения производительности, но сценарий реальной жизни сильно отличается. Я не успел использовать индексированные представления, где они мне больше всего нужны из -за слишком большого количества ограничений на то, что можно проиндексировать и что не может.
Если у вас есть внешние соединения в представлениях, они не могут быть использованы. Кроме того, общие выражения таблицы не допускаются ... Фактически, если у вас есть какие -либо заказы в подэлекциях или полученных таблицах (например, с предложением по разделу по пункту), вам тоже не повезло.
Это оставляет лишь очень простые сценарии использовать индексированные представления, что, на мой взгляд, может быть оптимизировано, в любом случае, создав надлежащие индексы на базовых таблицах.
Я буду рад услышать некоторые реальные сценарии, в которых люди фактически использовали индексированные взгляды на свою пользу и не могли бы сделать без них
Вам может понадобиться немного больше фона о том, что на самом деле является материализованным представлением. В 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