Вопрос подсказывает мне, что вы хотите избежать двух полных сканирований таблицы по набору данных.Эта техника может помочь вам.
WITH
base AS
(
SELECT a,b,c,d,e,f,g,h FROM abc -- all columns of interest
WHERE param IN ('x', 'y') -- all rows of interest
),
q1 AS
(
select a,b,c,d from base -- one specific subset
where param='x'
),
q2 AS
(
select e,f,g,h from base -- the other specific subset
where param='y'
)
SELECT a,b,c,d FROM abc -- then the union of the sets
UNION
SELECT e,f,g,h FROM abc -- that you are interested in.
Поскольку вы выполняете поиск по параметру, индекс будет иметь большое значение, позволяя заменить FULL TABLE SCAN менее затратным INDEX.scan.
Если набор различных значений в параметре невелик, может быть полезно построить гистограмм .
Как и во всех других вещах Oracle, ваш пробег может отличаться.
Мне было бы интересно услышать, как все это получается для вас.