Я собираюсь создать DW, и я услышал о материализованных представлениях. На самом деле я хочу создать представление, и оно должно обновляться автоматически при изменении базовых таблиц. Кто-нибудь может объяснить пример запроса.
Как создать материализованные представления в SQL Server?
Ответ 1
Они называются индексированными представлениями в SQL Server - читайте эти документы для получения дополнительной информации:
- Создание индексированного представления
- Улучшение производительности с помощью индексированных представлений SQL Server 2008
В принципе, все, что вам нужно сделать, это:
- создать обычный просмотр
- создать кластерный индекс в этом представлении
и все готово!
Сложная часть: представление должно удовлетворять довольно большому количеству ограничений и ограничений, которые изложены в документе. Если вы сделаете это - все, что есть. Представление обновляется автоматически, не требуется обслуживание.
Дополнительные ресурсы:
Ответ 2
Несмотря на чисто технический взгляд, индексированные представления кажутся чем-то, что каждый может использовать для повышения производительности, но сценарий реальной жизни сильно отличается. Я неудачно использовал индексированные представления, в которых я их больше всего нуждаюсь, потому что слишком много ограничений на то, что можно проиндексировать и что не может.
Если у вас есть внешние соединения в представлениях, они не могут использоваться. Кроме того, обычные табличные выражения не допускаются... Фактически, если у вас есть упорядочение в подзапросах или производных таблицах (например, с разделением по разделу), вам тоже не повезло.
Это оставляет только очень простые сценарии использования индексированных представлений, что-то, на мой взгляд, может быть оптимизировано путем создания надлежащих индексов на базовых таблицах в любом случае.
Я буду взволнован услышать некоторые сценарии реальной жизни, когда люди фактически использовали индексированные взгляды в свою пользу и не могли обойтись без них.
Ответ 3
Возможно, вам понадобится немного больше информации о том, что такое материализованный вид. В Oracle это объект, который состоит из нескольких элементов при попытке создать его в другом месте.
MVIEW - это, по сути, снимок данных из другого источника. В отличие от представления данные не найдены, когда вы запрашиваете представление, которое оно хранится локально в виде таблицы. MVIEW обновляется с использованием фоновой процедуры, которая начинается с регулярных интервалов или когда исходные данные изменяются. Oracle позволяет полностью или частично обновлять.
В SQL Server я бы использовал следующее, чтобы регулярно создавать базовые обновления MVIEW (полного).
Во-первых, представление. Это должно быть легко для большинства, поскольку взгляды довольно распространены в любой базе данных Далее, таблица. Это должно быть идентично представлению в столбцах и данных. Это будет хранить моментальный снимок данных вида. Затем процедура, которая усекает таблицу, и перезагружает ее на основе текущих данных в представлении. Наконец, задание, которое запускает процедуру, чтобы начать работу.
Все остальное - эксперимент.
Ответ 4
Если индексированное представление не является опцией, а быстрые обновления не нужны, вы можете создать таблицу кэширования кэша:
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 или изменить любые запросы или другие представления, ссылающиеся на нее, чтобы указать на таблицу кэша.
расписание ежедневно/ночью/еженедельно/ничего не обновлять, например
begin transaction
truncate table cachetablename
insert into cachetablename select * from viewname
commit transaction
NB: это будет пространство, также в ваших tx-журналах. Лучше всего использовать для небольших наборов данных, которые медленно вычисляются. Может быть, рефакторинг для исключения "простых, но больших" столбцов сначала во внешний вид.
Ответ 5
Для MS T-SQL Server я предлагаю создать индекс с помощью оператора "include". Уникальность не требуется, ни физическая сортировка данных, связанных с кластеризованным индексом. "Index... 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