Я создаю представление с двумя очень большими наборами данных, насчитывающими миллионы строк. У меня есть объединение двух таблиц с использованием полного внешнего объединения и группировки по некоторым столбцам.
У меня есть столбец идентификатора поля, общий для обеих таблиц, и мне нужно, чтобы пользователи могли фильтровать представление. Первоначально я использовал TableA.F_ID = TableB.F_ID в синтаксисе внешнего соединения, и это работало очень хорошо. Однако если бы в TableB были строки F_ID, которых не было в TableA, они бы не отображались, если бы я не использовал
where TableA.F_ID = <VALUE> or TableB.ID = <VALUE>
Чтобы обойти необходимость использования условия or, я использовал басню, из которой F_ID приходит в запросе через внутреннее соединение, для фильтрации данных. Этот метод работает, но он должен выполнить select для TABLEA и TABLEB, прежде чем отфильтровать строки, и запрос занимает более 10 минут, чтобы вернуться.
Основываясь на запросе ниже, есть ли способ оптимизировать это, чтобы получить более быстрый конечный результат?
select fm.F_ID
,fad.A
,fad.B
,fad.C
,fac.A
,fac.B
,fac.C
,fab.SUM as FAB_SUM
,fac.SUM as FAC_SUM
from V_FAB_COMBINED_GROUPS fad
FULL OUTER JOIN V_LTB_ALL_GROUPED fac on
fab.F_ID = fac.F_ID
and fac.A = fab.A
and fac.B = fab.B
and fac.C = fab.C
inner join fm on (fm.F_ID = fab.F_ID or fm.F_ID = fac.F_ID)
where fm.F_ID = 1