Я пытаюсь создать материализованное представление в Oracle, используя предварительно созданное представление.
create materialized view bfb_rpt_sch01.mvw_base_sales
as select * from bfb_rpt_sch01.vw_base_sales;
Эта команда не будет выполняться и зависнет. Я подумал, что, возможно, это как-то связано с неправильным написанием представления. Поэтому я выполнил следующий запрос к представлению.
select count(*) from bfb_rpt_sch01.vw_base_sales
Этот запрос выполняется около 6 минут и возвращает 2,7 миллиона. Это говорит мне, что проблема не в представлении, но я могу ошибаться.
CREATE
не просто требует больше времени, чем вы надеялись, чтобы полностью материализовать результат? Копирование данных, созданиеUNDO
иREDO
и т. д. может быть не быстрым. Во многих случаяхCOUNT(*)
довольно легко оптимизировать, поскольку все, что нужно сделать Oracle, — это просмотреть индекс по первичному ключу, и поскольку Oracle не нужно делать такие вещи, как вычислительные функции, которые применяются к проекции. - person Justin Cave   schedule 11.09.2013SELECT * FROM view_name
извлечете все 2,7 миллиона строк на свой локальный компьютер? Каковы планы запросов для оператораCREATE
по сравнению сSELECT
? Это то, что вы собираетесь регулярно обновлять? Или вы будете постепенно обновляться (в этом случае более длительная начальная загрузка может быть вполне приемлемой)? - person Justin Cave   schedule 11.09.2013