Пожалуйста, прежде всего используйте синтаксис в стиле ANSI
.
Теперь, насколько мне известно, NVL
работает хуже при работе с большими наборами данных.
Так как же мы можем достичь той же функциональности? - Мы можем использовать DECODE
или CASE WHEN
.
Среди этих двух также CASE WHEN
будет лучше, когда речь заходит о производительности.
Сравните план выполнения запроса, упомянутый вваш вопрос и план выполнения следующего запроса, и вы обязательно найдете разницу.
SELECT DISTINCT
P.SBJ_ID,
CASE
WHEN L.ATTR IS NOT NULL THEN L.ATTR
ELSE C.CODE
END AS ATTR,
L.VALUE
FROM
T_TRFPRMLST P
JOIN C_SBJCONCEPT C ON ( P.SBJ_ID = C.ID )
LEFT JOIN T_CMSATTR_LINK L ON ( P.SBJ_ID = L.SBJ_ID);
Пожалуйста, убедитесь, что PKs
и FKs
созданы правильно и правильные indexes
также доступны какindexes
созданы в основном для исполнения.
Ура !!