Временные таблицы записывают на диск, поэтому затраты на ввод / вывод как для чтения, так и для записи. Кроме того, большинство сайтов не управляют своими временными таблицами должным образом, и они попадают во временное табличное пространство по умолчанию, которое является тем же самым табличным пространством TEMP, которое все используют для сортировки и т. Д. Таким образом, существует вероятность конфликта ресурсов.
Материализованные представления предназначены для материализации аспектов нашего набора данных, которые обычно используются многими различными запросами. Вот почему наиболее распространенный вариант использования - для хранения агрегированных данных низкого уровня на более высоком уровне. Это не похоже на вариант использования, который у вас здесь есть. И вот!
Я делаю полное обновление MV, а не добавочное обновление
Так нет.
Затем у меня есть около 15 промежуточных шагов, где я объединяю таблицы измерений, выполняю некоторую агрегацию и внедряю бизнес-логику.
Это ужасно процедурный способ запроса данных. Иногда невозможно избежать этого, особенно в определенных сценариях хранилища данных. Однако из этого не следует, что нам нужно материализовать результаты этих запросов. Альтернативный подход заключается в использовании предложений WITH. Выходные данные одного подзапроса WITH могут передаваться в нижние подзапросы.
with sq1 as (
select whatever
, count(*) as t1_tot
from t1
group by whatever
) , sq2 as (
select sq1.whatever
, max(t2.blah) as max_blah
from sq1
join t2 on t2.whatever = sq1.whatever
) , sq3 as (
select sq2.whatever
,(t3.meh + t3.huh) as qty
from sq2
join t3 on t3.whatever = sq2.whatever
where t3.something >= sq2.max_blah
)
select sq1.whatever
,sq1.t1_tot
,sq2.max_blah
,sq3.qty
from sq1
join sq2 on sq2.whatever = sq1.whatever
join sq3 on sq3.whatever = sq1.whatever
Не говорю, что это не будет чудовищный запрос, террор департамента. Но он, вероятно, будет работать лучше, чем ваши MViews от GTT. (Oracle может решить материализовать эти промежуточные наборы результатов, но мы можем использовать подсказки, чтобы повлиять на это .)
Вы можете даже обнаружить, что при таком подходе некоторые из ваших шагов не нужны, и вы можете объединить несколько шагов в один запрос. Конечно, в реальной жизни я бы написал свое игрушечное утверждение выше как один запрос, а не как объединение трех подзапросов.