Материализованное представление по сравнению с таблицами: каковы преимущества? - PullRequest
43 голосов
/ 18 ноября 2010

Мне понятно, почему материализованное представление предпочтительнее простого запроса к базовой таблице.Что не так очевидно, так это преимущество перед простым созданием другой таблицы с теми же данными, что и в MV.Является ли единственным преимуществом MV на самом деле просто простота создания / обслуживания?

Разве MV не эквивалентен таблице с соответствующей схемой и INSERT INTO с использованием оператора SELECT MVs?

Это означает, что вы можете создать MV следующим образом

CREATE MATERIALIZED VIEW ... AS
SELECT * FROM FOO;

И вы можете создать эквивалентную таблицу:

CREATE TABLE bar (....);
INSERT INTO bar 
SELECT * FROM FOO;

Не сказать, что простота создания / обслуживания не достаточнопреимущество, я просто хочу убедиться, что я ничего не пропускаю.

Ответы [ 11 ]

24 голосов
/ 18 ноября 2010

Динамическое переписывание запросов .Материализованные представления определяют не только отношения, но и позволяют предварительно вычислять дорогостоящие объединения и объединения.Оптимизатор достаточно умен, чтобы использовать MV для извлечения релевантных данных, даже если MV явно не используется в запросе (с учетом настроек БД и т. Д.).

Ваш вопрос был помечен как Oracle, но MSSQL также делаетпохожие трюки.

11 голосов
/ 18 ноября 2010

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

10 голосов
/ 18 ноября 2010

Материализованные представления могут быть обновлены - они представляют собой снимки данных, снятых через регулярные интервалы.

Ваше второе утверждение является однократной сделкой - данные в этот момент вставляются в таблицу.Дальнейшие изменения исходных данных не отражаются в таблице.

6 голосов
/ 11 августа 2012
  1. Материализованное представление останется синхронизированным с базовыми отношениями, от которых оно зависит.

  2. Если материализованное представление обновляется, при изменении материализованного представленияэто также изменит базовое отношение, от которого оно зависит.

6 голосов
/ 18 ноября 2010

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

2 голосов
/ 07 июня 2016

В дополнение к уже упомянутым преимуществам:

  • динамическое переписывание запросов (короче говоря, оптимизатор БД знает, как создается MV, поэтому он может использовать его для оптимизации других запросов),
  • необязательный, автоматический, возможно, с постепенным обновлением,

Я хотел бы упомянуть:

  • в некоторые материализованные представления можно записать, что обновляет исходную таблицу(например, в соединения с первичными ключами можно записывать, с другой стороны, если материализованное представление является результатом группы, в которую оно не может быть записано)
  • сервер БД сохраняет запрос, создавший данныеи может запустить его заново.Если вы создаете таблицу, вам нужен внешний инструмент (возможно, просто пользовательский скрипт) для повторного запуска запроса всякий раз, когда пользователь запрашивает или запрашивает обновление.(Я работаю в компании, разрабатывающей инструмент, который делает это и многое другое).
1 голос
/ 30 января 2014

1) Ускорение операций записи : поскольку индексы могут быть созданы для материализованных представлений, чтение из них происходит очень быстро. Обратите внимание, что если вы создаете индекс для таблицы, которая включает в себя много записей, накладные расходы на обслуживание индекса, как правило, замедляют процесс записи. Чтобы избежать этого, вы можете создать представление материализации и создать для них индексы. Эти индексы могут поддерживаться в фоновом режиме и не оказывают негативного влияния на операции записи в таблицу.

2) Операции чтения с ускорением : сложные объединения; Повороты, для запуска которых требуются возрасты, можно ускорить, создав индексы для материализованных представлений. Это становится очень удобным в большинстве сценариев отчетности.

1 голос
/ 23 ноября 2010

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

0 голосов
/ 13 марта 2019

Я думаю, правильное сравнение будет:

REFRESH MATERIALIZED VIEW bar;

против

CREATE TABLE bar (....);
INSERT INTO bar 
SELECT * FROM FOO;

Поскольку MV вы можете сделать это один раз, и обновить, когда вам нужно сделать выбор (и даже сэкономить некоторые вызовы, если вы знаете, как часто меняется информация)

Также вы можете предоставить и индексировать MV, а у вас нет другого пути. Конечно, это будет способствовать производительности MV только для больших наборов результатов.

В postgres вы также можете сделать это:

REFRESH MATERIALIZED VIEW CONCURRENTLY bar;

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

Это то, что вы не можете сделать с помощью SELECT INSERT INTO.

0 голосов
/ 25 октября 2018

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...