SELECT * FROM (
SELECT ACDSN, APL_MGNO FROM
(
SELECT ACDSN, APL_MGNO,RGDTM, ROW_NUMBER() OVER(PARTITION BY ACDSN ORDER BY RGDTM ASC) RAN
FROM APPEAL_LINK
) WHERE RAN = 1
)
위와 같이 쿼리를 작성하였는데요.. 더 간단하게 하는 방법이 있을까요?
해당 값을로 다른테이블에 조인할때 사용할 건데요. .위와 같은 방법으로는 되지만.. 뭔가.. 쓸데없이 select가 3번이나 들어간 기분이 들어서요.
단순히 Select 의 갯수를 줄이고자 한다면?
맨 마지막 Select 는 굳이 필요 없구요...
Row_number 대신 Max() KEEP()을 사용하면 한번에 되긴 합니다만...
구문을 짧게 만드는 것과 성능을 빠르게 만드는것은 다른 것이죠.
또한 전체 SQL 에서 해당 부분이 차지하는 역할에 따라 튜닝방법이 달라질 수 있습니다.
해당 부분만 최적화 했을 때, 오히려 전체 쿼리의 성능이 저하될 수도 있습니다.
예를 들면 해당 구문에는 조건이 전혀 없습니다.
풀스캔 할 수밖에 없는 상황이지요.
풀스캔 쿼리를 아무리 튜닝해도 풀스캔 범위를 벗어날수는 없죠.
그런데 조인되는 다른 부분에 범위를 확 줄일만한 검색조건이 들어간다면?
다른 조건으로 범위를 줄인 뒤에 나중에 해당부분을 체크조건으로 푸는것이 합리적이죠.