У меня есть материализованное представление в Oracle, которое содержит LEFT JOIN, обновление которого занимает очень много времени.Когда я обновляю базовую таблицу, для ее запуска требуется 63914,765 с (да, это почти 17 часов).
Я использую LEFT JOIN для той же таблицы, потому что я хочу перенести данные из строк в столбцы.Команда pivot недоступна в этой версии Oracle, и использование GROUP BY + CASE недопустимо в материализованном представлении FAST REFRESH.
Журнал материализованного представления выглядит следующим образом:
CREATE MATERIALIZED VIEW LOG ON Programmes_Titles
WITH PRIMARY KEY, rowid
INCLUDING NEW Values;
Само материализованное представление выглядит следующим образом (оно содержит 700000 строк, таблица Programmes_Titles содержит 900000 строк):
CREATE MATERIALIZED VIEW Mv_Web_Programmes
REFRESH FAST ON COMMIT
AS
SELECT
t1.ProgrammeId,
t1.Title as MainTitle,
t2.Title as SecondaryTitle,
--Primary key
t1.Title_Id as t1_titleId,
t2.Title_Id as t2_titleId,
t1.rowid as t1_rowid,
t2.rowid as t2_rowid
FROM
Programmes_Titles t1,
Programmes_Titles t2
WHERE
t1.Titles_Group_Type = 'mainTitle'
AND t1.Programme_Id = t2.Programme_Id(+) AND t2.Titles_Group_Type(+) = 'secondaryTitle'
Используемый мной оператор UPDATE:
UPDATE Programmes_Titles
SET Title = 'New title'
WHERE rowid = 'AAAL4cAAEAAAftTABB'
This UPDATEЗаявление занимает 17 часов.При использовании INNER JOIN (удаление (+)) это занимает миллисекунды.
Я также пытался добавить INDEXES в материализованное представление Mv_Web_Programmes, но, похоже, это тоже не помогло.(Это все еще длится более минуты, что очень медленно, я не жду 17 часов после каждого изменения, так что это может улучшить ОБНОВЛЕНИЕ)
Итак, мой вопрос: почему это такдолго обновлять базовую таблицу?Как я могу улучшить это?