При обновлении материализованного представления индексы также обновляются автоматически?

В настоящее время я использую Postgres 9.3.3.

Если вы refresh используете материализованное представление, индексы этого материализованного представления также переиндексируются? Или индексы нужно переиндексировать вручную?

Глядя на следующий вопрос, он выглядит так, но ответа нет. к нему, и я не могу найти никакой подтверждающей документации.


person thames    schedule 21.03.2014    source источник
comment
Я оставлю ответ тому, кто может процитировать надежный источник, но 2 мысли: 1) Вы, вероятно, могли бы построить для этого довольно решающий тест: создать запрос, который попадает в индекс представления, а затем изменить базовые данные так, чтобы результаты изменилось бы. Если при обновлении материализованного представления отображаются правильные данные, индекс был обновлен. 2) С точки зрения согласованности единственная альтернатива обновлению представления, по-видимому, состоит в том, чтобы сделать его недействительным, и в этом случае вы увидите изменение плана запроса. Индекс, указывающий на несуществующие данные, может показаться очень плохой идеей.   -  person IMSoP    schedule 21.03.2014


Ответы (2)


Согласно документации:

После создания индекса дальнейшее вмешательство не требуется: система будет обновлять индекс при изменении таблицы...

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

Еще раз руководство:

Когда материализованное представление упоминается в запросе, данные возвращаются непосредственно из материализованного представления, как из таблицы; правило используется только для заполнения материализованного представления.

person Erwin Brandstetter    schedule 21.03.2014
comment
Я полагаю, что OP намеревается узнать, нужно ли выполнять какое-либо соответствующее обслуживание после обновления MV, не обязательно ограничиваясь индексами. Таким образом, @thames следует отметить, что с новой поддержкой СОГЛАСНО ключевое слово в версии 9.4, если это ключевое слово используется, то, согласно документации, MV нуждается в ВАКУУМИРОВАНИИ из-за ... DELETE, которые оставят мертвые кортежи позади. Поддержка параллелизма — это настолько хорошо, что я полагаю, что она будет широко распространена, поэтому об этом полезно знать. - person StartupGuy; 30.05.2014

Конечно, индексы будут обновляться.

Быстрый тест, по-видимому, показывает, что они сохраняют свой размер и после каждого ОБНОВЛЕНИЯ, что предполагает, что они воссоздаются с нуля. Это имело бы смысл, потому что я думаю, что представление создается заново для каждого обновления и в основном переименовывается на место.

person Richard Huxton    schedule 21.03.2014
comment
Это имеет смысл. Поскольку Postgres перезаписывает всю таблицу, гораздо быстрее переписать индексы с нуля. - person Erwin Brandstetter; 21.03.2014