조회 쿼리문의드립니다. 0 3 843

by DB초보자입니다 [SQL Query] [2020.03.16 09:35:24]


EXEC :NM := 'AAA';    

 

WITH TEMP AS

(

  SELECT '1' AS NO ,'AAA' AS NM, TO_DATE('2020-03-16 09:33:33', 'YYYY-MM-DD HH24:MI:SS') AS FSR_DT FROM DUAL

  UNION ALL

  SELECT '2' AS NO ,'AAA' AS NM, TO_DATE('2020-03-16 07:10:33', 'YYYY-MM-DD HH24:MI:SS') AS FSR_DT FROM DUAL

  UNION ALL

  SELECT '3' AS NO ,'CCC' AS NM, TO_DATE('2020-03-16 09:22:33', 'YYYY-MM-DD HH24:MI:SS') AS FSR_DT FROM DUAL

  UNION ALL

  SELECT '4' AS NO ,'CCC' AS NM, TO_DATE('2020-03-15 09:33:33', 'YYYY-MM-DD HH24:MI:SS') AS FSR_DT FROM DUAL

  UNION ALL

  SELECT '5' AS NO ,'FFF' AS NM, TO_DATE('2020-03-16 08:33:33', 'YYYY-MM-DD HH24:MI:SS') AS FSR_DT FROM DUAL

 

)

--1. 서브쿼리에 조인을 이용해서 조회하는경우

SELECT A.*

  FROM TEMP A

 WHERE NM = 'AAA'

   AND FSR_DT = (SELECT MIN(SA.FSR_DT)

                   FROM TEMP SA

                  WHERE SA.NM = A.NM)

--2. 변수를 서브쿼리에 넣어서 조회하는경우

--SELECT A.*

--  FROM TEMP A

-- WHERE NM = :NM

--   AND FSR_DT = (SELECT MIN(SA.FSR_DT)

--                   FROM TEMP SA

--                  WHERE SA.NM = :NM)

 

위의 샘플데이터와 비슷한식으로 데이터를 조회하려고합니다.

샘플데이터라 운영데이터를 조회 할 경우와는 차이가 발생하겠지만 어느쿼리가 성능에 좀더 좋을지 조언을 얻고자합니다.

감사합니다.

by 우리집아찌 [2020.03.16 09:50:42]

저라면 row_number() over() 함수를 이용해서 서브쿼리를 쓰지 않고 테이블 한번만 스캔할수 있게 sql을 짜는 방법을 택하겠습니다 . 

select *
  from ( select row_number() over(order by fsr_dt) rn

                from temp a 

                 where nm = :nm )

  where rn <= 1


by DB초보자입니다 [2020.03.16 10:01:15]

새로운방법이 있군용!!!

저는근데 저렇게 짜을때 성능상에 차이가있는지가 궁금해요ㅠㅠ


by 느훼훼 [2020.03.16 13:45:22]

저라민 직접 둘 다 짜보고 실제 조회속도 비교해보고 검증용으로 플랜까지 떠보겠습니다~

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