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

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

5 ответов

Решение

Они называются индексированными представлениями в 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: это займет место, также в ваших журналах передачи. Лучше всего использовать для небольших наборов данных, которые медленно вычисляются. Может быть, рефакторинг для устранения "простых, но больших" столбцов сначала во внешнем виде.

Для MS T-SQL Server я предлагаю изучить создание индекса с помощью оператора "include". Уникальность не требуется, равно как и физическая сортировка данных, связанных с кластеризованным индексом. "Index ... Include ()" создает отдельное физическое хранилище данных, автоматически поддерживаемое системой. Концептуально это очень похоже на материализованное представление Oracle.

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

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

Другие вопросы по тегам