오라클 쿼리 1,000만건 조회시 ...(?) 0 7 167

by 안쓰 [SQL Query] [2019.08.12 10:21:06]


안녕하세요 초급개발자입니다

 

이미 SQL 질문을 등록하고 마농님께서 답변주신 쿼리인데 ,

1년치 1,000만건 데이터를 기준으로 조회하기엔

데이터가 너무많아서 추가 문의드립니다

 

 

질문드릴 쿼리는

sms 테이블에

sms 코드별로 메시지를 5개씩 추출해내는 쿼리입니다

 

1. SMS 테이블

코드(PK) / 코드명 / 발송내용 / 등록일자

 

2. 출력예시

코드가 100개있다고할때 코드별로 발송내용을 5건씩 조회하고싶습니다

물론 발송내용이 5건이 없을수도 있구요..

1년기간을 조회했을때 가장 최근날짜의 5건을 기준으로 조회하면 될것같은데 어떻게 접근해야할지 모르겠습니다..

 

ex)출력 결과

A코드 발송내용 5건 

B코드 발송내용 5건 

C코드 발송내용 5건 

 

-- 마농님께서 달아주신 답변

SELECT *

  FROM (SELECT cd, nm, contents, dt

             , ROW_NUMBER() OVER(PARTITION BY cd ORDER BY dt DESC) rn

          FROM sms

        ) a

 WHERE rn <= 5

;

 

 

 

위와같이 데이터를 조회할수는 있으나

데이터가 1년기준으로 약 1,000만건정도 되다보니

데이터를 조회할때 데이터가 양이 너무많아 조회시간이 감당이 안됩니다...ㅜㅜ 도움부탁드립니다

by 모래가흙흙 [2019.08.12 11:02:08]

혹시 저 쿼리의 결과는 몇건정도 되는건가요?


by 안쓰 [2019.08.12 12:53:53]

모래가 흙흙님 답변 감사드립니다 !

1년치를 돌려보진 않았어서 확인하고 답변드리겠습니다


by 마농 [2019.08.12 11:17:31]

전체 조회가 느리다면?
코드 100건 루프 돌리는 방식으로 풀어야 할 것 같은데요.
테이블의 PK 및 인덱스 정보 좀 주세요.
그리고 왜 제가 답변한 쿼리만 올리셨나요?
적용한 쿼리를 올려주셔야죠. 년도 기간 조건도 안보이고...


by 안쓰 [2019.08.12 12:57:46]

마농님 다시한번 답변달아주셔서 감사드립니다

 

제가질문올릴때 테이블정보를 잘못올렸는데요

 

sms테이블 PK는 2개로

1. 일련번호(숫자) / 2. sms생성일시(날짜)

이렇게입니다

 

그리고 질문에 잘못등록한

코드 컬럼은 일반컬럼입니다

근데 조회하고자 하는내용이

해당 sms테이블에서

pk인 생성일시를 1년기간으로 잡고

코드 컬럼별 발송문구를 5개씩 구하는 쿼리입니다

 

감사합니다 !!

 


by 생각 [2019.08.12 11:20:21]
SELECT * 
  FROM (SELECT cd, nm, contents, dt
             , ROW_NUMBER() OVER(PARTITION BY cd ORDER BY dt DESC) rn        
         FROM sms
        WHERE dt BETWEEN To_Char(Add_Months(SYSDATE,-12),'YYYYMMDD') AND To_Char(SYSDATE,'YYYYMMDD')
        ) a
 WHERE rn <= 5;
-- dt 규격에 맞춰주심 될 것 같고, dt 인덱스를 넣어주시면 속도 향상에 좋을거 같아요
-- top-n 쿼리방식은 속도측면에서 좋다는 얘기를 들어봤습니다.
-- * 부분은 실제 필요한 컬럼만 나열하면 좋습니다.

 


by 안쓰 [2019.08.12 12:59:10]

by생각님 답변 감사드립니다

 

초급개발자인지라 아직 튜닝을 잘몰라서그런데

dt에 인덱스를 달아준다는게 어떤내용인지 명확히 이해가 안됬습니다ㅠㅠ


by 안쓰 [2019.08.12 13:15:29]

추가로 질문을 덧붙이자면

sms테이블의 1년기간치의 총 데이터는 2천1백만건입니다 !

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