2011-01-17 3 views
1

У меня есть два стола ЗАЯВЛЕНИЕ И ОПЕРАЦИЯ, которые я хотел бы создать. Обе таблицы имеют идентификатор (VARCHAR2) и TS (NUMBER).Кэширование ценности Oracle в представлении?

Для каждого идентификатора, ЗАЯВЛЕНИЕ генерируется каждый месяц на основе TRANSACTION и других таблиц.

Вид имеет 3 столбца: ID, TS и VALUE. Каждая строка в представлении соответствует строке в ЗАЯВКЕ, а VALUE - довольно сложная агрегация в зависимости от ЗАЯВЛЕНИЯ и ОПЕРАЦИИ.

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

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

ответ

3

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

Oracle поддерживает материализованные представления, но materialized views are notoriously restrictive - нет недетерминированных функций и т.д.

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

Смежные вопросы