쿼리문의 튜닝(?) 질문.. 0 4 1,791

by 삼만돌이 [2014.07.28 15:04:12]


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번이나 들어간 기분이 들어서요.           

by 우리집아찌 [2014.07.28 15:22:14]
SELECT * FROM A,
             ( SELECT ACDSN, APL_MGNO,RGDTM, ROW_NUMBER() OVER(PARTITION BY ACDSN ORDER BY RGDTM ASC) RAN
                 FROM APPEAL_LINK ) B
             )  
WHERE A.ID = B.ID 
  AND B.RAN = 1

이렇게요??

 


by 삼만돌이 [2014.07.28 16:22:38]

감사합니다.


by 마농 [2014.07.28 15:49:55]

단순히 Select 의 갯수를 줄이고자 한다면?
맨 마지막 Select 는 굳이 필요 없구요...
Row_number 대신 Max() KEEP()을 사용하면 한번에 되긴 합니다만...
구문을 짧게 만드는 것과 성능을 빠르게 만드는것은 다른 것이죠.
또한 전체 SQL 에서 해당 부분이 차지하는 역할에 따라 튜닝방법이 달라질 수 있습니다.
해당 부분만 최적화 했을 때, 오히려 전체 쿼리의 성능이 저하될 수도 있습니다.
예를 들면 해당 구문에는 조건이 전혀 없습니다.
풀스캔 할 수밖에 없는 상황이지요.
풀스캔 쿼리를 아무리 튜닝해도 풀스캔 범위를 벗어날수는 없죠.
그런데 조인되는 다른 부분에 범위를 확 줄일만한 검색조건이 들어간다면?
다른 조건으로 범위를 줄인 뒤에 나중에 해당부분을 체크조건으로 푸는것이 합리적이죠.


by 삼만돌이 [2014.07.28 16:22:12]

네 조언 감사드려요..

전체적으로 점검하고 작업하도록 하겠습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입