데이터베이스 개발자 질문과 답변 게시판

데이터베이스 개발/운영 관련 질문과 답변을 올리는 게시판입니다. 궁금하신 내용을 이곳에서 문의하시면 SQLER 분들의 답변을 받으실 수 있습니다. 문의를 하실때에는 최근 작업하신 특이 사항이나, 장애 발생 전 상황을 상세히 올려 주시면 답글을 적어주시는 SQLER분들의 답변이 더 정확할 수 있으니 도움 되시길 바랍니다. 쿼리 문의일 경우, 실제 문제가 재현되는 테이블생성, 샘플데이터 생성 쿼리를 함께 올려 주시면 더 빠르고 정확한 쿼리 문의 응답이 가능합니다.

쿼리 문의드립니다~!

엔더 2018.05.31 15:22 Views : 755

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


쿼리 및 속도의 문제로 문의드립니다~!


SQL SERVER 2012를 사용하고 있습니다.


--------------------------------------------


테이블 : TABLE_PAYMENT

컬럼1 : PAYMENT_UUID (고유아이디) - PK

컬럼2 : PERSON_NUMBER (사원번호)

컬럼3 : PAY_YYYYMM (년월) - 6자리숫자

컬럼4 : PAY_AMT (급여총액)

컬럼5 : DEL_YN (삭제유무) - 'N' DEFAULT

특이사항 : 삭제되지않은 사원번호+년월 별로 급여총액은 1건


위와 같은 간단한 급여테이블인데요,


화면에서 년도로 조회를 합니다.


결과값은 해당년도의 년월 + 사원별로 해당년월의 급여와 그 사원의 최근 1년간 급여총액이 함께나와야 합니다.

(2017년 1월 급여일 경우는 2016년 2월부터 2017년 1월급여까지의 합)

(2017년 2월 급여일 경우는 2016년 3월부터 2017년 2월급여까지의 합)


예를 들면..


--------------------------------------


EX) 2017년  조회 후


2017-01 / 사원A / 100만 / 1200만 (급여가 100만으로 동일한 사람)

2017-02 / 사원A / 100만 / 1200만

.

.

.

2017-12 / 사원A / 100만 / 1200만

2017-01 / 사원B / 150만 / 1300만 (급여 변동이 심한 사람)

2017-02 / 사원B / 200만 / 1400만

.

.

.

2017-12 / 사원B / 350만 / 1650만

.

.

.


--------------------------------------


이렇게 데이터가 나와야합니다.


해서 쿼리를 짜보았습니다.


SELECT A.PAY_YYYYMM

, A.PERSON_NUMBER

, A.PAY_AMT

, SUM(B.PAY_AMT) PREV_PAY_TOT

FROM TABLE_PAYMENT A

INNER JOIN TABLE_PAYMENT B

ON A.PERSON_NUMBER=B.PERSON_NUMBER

AND B.PAY_YYYYMM BETWEEN

CONVERT(VARCHAR(6),DATEADD(MONTH,1,DATEADD(YEAR,-1,A.PAY_YYYYMM+'01')),112)

AND A.PAY_YYYYMM

AND B.DEL_YN='N'

WHERE 1=1

AND A.PAY_YYYYMM LIKE '2017' + '%'

AND A.DEL_YN='N'

GROUP BY A.PAY_YYYYMM

, A.PERSON_NUMBER

, A.PAY_AMT

ORDER BY A.PERSON_NUMBER

, A.PAY_YYYYMM


결과는 정확하게 나오지만, 너무 느리네요..


데이터량도 많고, 쿼리도 뭔가 어색해서 늦어지는 결과인거같습니다.


CREATE INDEX INDEX_TABLE_PAYMENT_SEARCH1

ON TABLE_PAYMENT(PAY_YYYYMM, PERSON_NUMBER, DEL_YN) INCLUDE (PAY_AMT)


위와 같이 인덱스도 추가하였지만,


여전히 시간이 많이 걸립니다..


BETWEEN 부분을 개선해야하는걸까요?


무엇이 잘못된걸까요 ㅠㅠ

No. Subject Author Date Views
10237 LEFT OUTER JOIN 중복관련 질문입니다ㅣ [2] kjw3157 2018.06.04 2047
10236 특정 컬럼에서 연속된 데이터들만 카운트 하는법 질문 드립니다 [3] 스터프 2018.06.04 841
10235 쿼리 질문입니다. 얼음왕자 2018.06.02 584
10234 db의 lock을 강제로 킬하는 타임아웃 설정이 가능한가요? 개발좋아 2018.06.02 668
10233 대용량 테이블(1억건) 인덱스 생성 질문 드립니다. [1] 깜우석 2018.06.01 1648
10232 ISDATE INDEX 관련 질문입니다~! [2] 엔더 2018.06.01 695
» 쿼리 문의드립니다~! [3] 엔더 2018.05.31 755
10230 정말 이상한 사칙연산 결과 질문 드립니다. [1] hackhyun 2018.05.30 944
10229 쿼리 문의 드립니다. l1j2e3 2018.05.30 682
10228 고수님들께 SQL 쿼리작성문 문의드립니다! 브라미 2018.05.29 795
10227 DB서버 이전설치시 가장 좋은 방법은 뭘까요? [3] 이상혁_300342 2018.05.28 1206
10226 Table Join후 건 수(Count) 확인 시 최적화 방법 문의 노란하늘 2018.05.28 742
10225 세개의 테이블 join시 가장 많은 라인수에 따라서 행갯수 표기방법 좀알려주세요. 정명호 2018.05.24 641
10224 IF문 안에 있는 링크드서버(Linked Server) 로그인 [1] NiceHee 2018.05.24 922
10223 프로시저 호출 로그 [2] 봉술의달인 2018.05.24 1077
10222 데이터 캐싱에 대하여 ( 일반 SAN과 SSD차이가 이렇게 나는지요? [1] 공유맨 2018.05.23 792
10221 날짜별 합계인데 시간이 다른건 어떻게 해야 하나요.... [1] 똘스또이 2018.05.23 1274
10220 쿼리 문의드립니다! [2] szl0828 2018.05.21 874
10219 쿼리 질문입니다. [1] 얼음왕자 2018.05.21 762
10218 쿼리 문의 드립니다. [2] l1j2e3 2018.05.18 852





XE Login