Быстрое обновление при коммите с помощью groupby и where - PullRequest
0 голосов
/ 21 июня 2019

Я могу успешно создать материализованное представление, как показано ниже, однако, когда я смотрю на MV_CAPABILITIES_TABLE, он говорит мне, что REFRESH_FAST_AFTER_ONETAB_DML и REFRESH_FAST_ANY_DML невозможны.

CREATE MATERIALIZED VIEW MV_contacts_table
BUILD IMMEDIATE
REFRESH FAST ON COMMIT AS
SELECT t.ID AS ID,
MAX(DECODE(t.FieldName, 'FirstName', t.FieldValue)) FirstName, 
MAX(DECODE(t.FieldName, 'LastName', t.FieldValue)) LastName,
COUNT(*) AS NUM_FIELDS FROM Contacts_Table t
WHERE t.FieldName = 'FirstName' OR t.FieldName = 'LastName'
GROUP BY t.ID

Здесь MV_CAPABILITIES_TABLE

PCT                             N               
REFRESH_COMPLETE                Y               
REFRESH_FAST                    Y               
REWRITE                         N               
PCT_TABLE                       N   CONTACTS_TABLE  675 2068    relation is not a partitioned table
REFRESH_FAST_AFTER_INSERT       Y               
REFRESH_FAST_AFTER_ONETAB_DML   N                       2086    mv uses the MIN or MAX aggregate functions
REFRESH_FAST_AFTER_ANY_DML      N                       2161    see the reason why REFRESH_FAST_AFTER_ONETAB_DML is disabled
REFRESH_FAST_PCT                N                       2157    PCT is not possible on any of the detail tables in the materialized view
REWRITE_FULL_TEXT_MATCH         N                       2159    query rewrite is disabled on the materialized view
REWRITE_PARTIAL_TEXT_MATCH      N                       2159    query rewrite is disabled on the materialized view
REWRITE_GENERAL                 N                       2159    query rewrite is disabled on the materialized view
REWRITE_PCT                     N                       2158    general rewrite is not possible or PCT is not possible on any of the detail tables
PCT_TABLE_REWRITE               N   CONTACTS_TABLE  675 2068    relation is not a partitioned table

Если я удалю предложение where, возможен REFRESH_FAST_AFTER_ANY_DML. Есть ли вероятность, что этот SQL-запрос может быть изменен так, чтобы мое материализованное представление имело значение REFRESH_FAST_AFTER_ANY_DML с включенным предложением Where?

1 Ответ

0 голосов
/ 26 июня 2019

Это ограничение материализованных представлений :

Материализованное представление с MAX или MIN быстро восстанавливается после удаления или смешанные операторы DML , если в нем нет предложения WHERE .

Максимальное / минимальное быстрое обновление после удаления или смешанного DML не имеет такое же поведение, как и в случае вставки. Удаляет и пересчитывает максимальные / минимальные значения для затронутых групп. Вы должны знать о его влияние на производительность.

(выделено мое).

Так что вам нужно найти какой-то другой способ достичь своей цели.

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