У меня есть запрос, который я пытаюсь оптимизировать, для выполнения которого требуется 6 минут (DS1 имеет 200 тыс. Строк и DS2 200 тыс. Строк).Мне было интересно, есть ли какие-нибудь оптимизации, которые может видеть гуру оракула?Я ни в коем случае не эксперт, скорее любитель ... проблема в том, что групповая часть занимает больше всего времени ...
WITH DS1 AS
(SELECT
/*+ PARALLEL */
*
FROM PD1
WHERE TYPE = 'TSY'
AND SOURCE = 'A'
),
DS2 AS
(SELECT
/*+ PARALLEL */
*
FROM PD1
WHERE TYPE = 'LGL'
AND SOURCE = 'B'
),
Q AS
(SELECT DS1.ID AS DS1_ID,
DS1.CODE AS DS1_CODE,
DS2.CODE AS DS2_CODE,
DS2.ID AS DS2_ID,
DS1.TYPE AS TYPE1,
DS2.TYPE AS TYPE2,
DS1.SOURCE AS SS1,
DS2.SOURCE AS SS2,
DS1.ATTRIBUTE,
DS1.ATTRIBUTE_VAL,
DS1.ATT_AND_VAL
FROM DS1
JOIN DS2
ON DS1.ATT_AND_VAL = DS2.ATT_AND_VAL
) ,
GROUPINGS AS
(SELECT
/*+no_merge */
DS1_ID AS BASE_ID ,
DS1_CODE AS BASE_CODE,
DS2_CODE AS TARGET_CODE,
COUNT(DISTINCT(DS2_ID)) AS COUNT_OF_TARGET_ID
FROM Q
GROUP BY DS1_ID,
DS1_CODE,
DS2_CODE
)
SELECT *
FROM GROUPINGS
ORDER BY BASE_ID,
BASE_CODE,
TARGET_CODE;