Кэширование значений Oracle при генерации представлений? - PullRequest
1 голос
/ 17 января 2011

У меня есть две таблицы STATEMENT и TRANSACTION, на которые я хотел бы создать представление.Обе таблицы имеют ID (VARCHAR2) и TS (NUMBER).

Для каждого идентификатора STATEMENT генерируется каждый месяц на основе данных TRANSACTION и других таблиц.

Представление имеет 3 столбца: ID,ТС и ЗНАЧЕНИЕ.Каждая строка в представлении соответствует строке в STATEMENT, и VALUE является довольно сложной агрегацией, зависящей как от STATEMENT, так и от TRANSACTION.

В частности, часть VALUE, полученная из TRANSACTION, является постоянной для каждого идентификатора, независимо от TS.

Поскольку это агрегированное значение не изменяется, Oracle автоматически его кеширует?Если нет, возможно ли где-нибудь кэшировать значения, например, путем создания промежуточного представления для этого значения?

1 Ответ

3 голосов
/ 17 января 2011

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

Oracle поддерживает материализованные представления, но материализованные представления, как известно, ограничивают - нет недетерминированных функций и т. Д.

Чтобы заметить разницу, CREATE VIEW создает нематериализованное представление.Oracle требует ключевое слово MATERIALIZED: CREATE MATERIALIZED VIEW ... для материализации представления.

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