Использование материализованных представлений (materialized view)в Oracle10g позволяет одновременно управлять сводной информацией в хранилище данных и ускорять выполнение запросов.
Создадим materialized view по шагам:
1) Предоставим полномочия
REFRESH указывает, как Oracle обновляет данные материализованного представления. В приведенном примере полные (COMPLETE) обновления являются единственным вариантом. Возможны также быстрые (FAST) (инкрементные) обновления, однако для них существует ряд ограничений и предостережений.
ON DEMAND – обновление данных только при явном обновлении с использованием пакетf DBMS_MVIEW. ON COMMIT – каждый раз когда выполняется фиксация транзакции для таблиц представления.
4) Обновляем статистику оптимизатора и данные мат.представления (соотв.)
Создадим materialized view по шагам:
1) Предоставим полномочия
-- создание MV grant create materialized view to ALEX; -- оптимизация запросов с учетом MV grant query rewrite to ALEX;2) Создадим тестовые таблицы с данными - магазины и продажи в них. Материализованное представление будет выдавать сумму продаж по каждому из магазинов
create table SHOPS( id_shop number(5) PRIMARY KEY, name_shop varchar2(45) not null ); create table SALES( id_shop number(5), id_good number(5), sales_good decimal(8,2) ) alter table SALES add constraint PK_SALES primary key(id_shop, id_good) add constraint FK_SHOPS_SALES foreign key (id_shop) references SHOPS(ID_SHOP)3) Создаем материализованное представление
CREATE MATERIALIZED VIEW MV_SALES BUILD IMMEDIATE REFRESH COMPLETE ON COMMIT AS select sh.id_shop, sum(sa.sales_good) from SHOPS sh, SALES sa where sh.id_shop = sa.id_shop group by sh.id_shop;BUILD IMMEDIATE заполняет материализованное представление во время его создания (значение по умолчанию). Альтернативное предложение BUILD DEFERRED создает только структуру; заполнить материализованное представление можно позже, используя пакет DBMS_MVIEW.
REFRESH указывает, как Oracle обновляет данные материализованного представления. В приведенном примере полные (COMPLETE) обновления являются единственным вариантом. Возможны также быстрые (FAST) (инкрементные) обновления, однако для них существует ряд ограничений и предостережений.
ON DEMAND – обновление данных только при явном обновлении с использованием пакетf DBMS_MVIEW. ON COMMIT – каждый раз когда выполняется фиксация транзакции для таблиц представления.
4) Обновляем статистику оптимизатора и данные мат.представления (соотв.)
dbms_stats.gather_table_stats(USER, 'MV_SALES') ; dbms_mview.refresh('MV_SALES', 'A');Проверка:
SQL> select * from Alex.Mv_Sales 2 / ID_SHOP SUM(SA.SALES_GOOD) ------- ------------------ 1 41,15 2 41,57 3 66,51Изменим данные в таблицах и повторим запрос:
SQL> update SALES 2 set sales_good = sales_good + 100 3 where id_shop = 1 and id_good = 1 4 / 1 row updated SQL> select * from Alex.Mv_Sales 2 / ID_SHOP SUM(SA.SALES_GOOD) ------- ------------------ 1 141,15 2 41,57 3 66,51
Комментариев нет :
Отправить комментарий