Фильтр по секционированным таблицам - Oracle - PullRequest
1 голос
/ 30 апреля 2020

Я написал CTE для получения фильтров диапазона дат и использую их в качестве своих фильтров даты для многораздельной таблицы (table2) с объединением. Запрос выполняется дольше, чем ожидалось, и объяснение показывает, что все разделы доступны, а не несколько.

with DT_FILT as (
    select min(DT) as ST_DT, max(DT) as END_DT from schema1.table1
)
select TBL.col1 ,TBL.col2
from schema1.table2 TBL
join DT_FILT CTE
on 1=1
where TBL.DT between CTE.ST_DT and CTE.END_DT

Я также попробовал другой способ, используя подзапросы из CTE, это несколько лучше, чем раньше, но не так хорошо, как явное упоминание значений даты в фильтрах.

select TBL.col1 ,TBL.col2
from schema1.table2 TBL
where TBL.DT between (select ST_DT from CTE) and (select END_DT from CTE)

Может ли кто-нибудь помочь мне, как можно добиться более высокой производительности в этой ситуации, выбирая только целевые разделы из фильтров CTE?

...