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

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

쿼리 문의드립니다~!

엔더 2018.05.31 15:22 Views : 750

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


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


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
10242 날짜비교 (형변환) 질문 드립니다. [1] 비폭력무저항 2018.06.08 809
10241 제발 부탁드립니다 하 [1] fjfjfj 2018.06.07 1386
10240 row data 한줄을 두줄로...(현충일인데 근무중 헬프미..) [1] 촐이 2018.06.06 964
10239 다중열 서브쿼리 정렬 질문 [1] 정연석6546 2018.06.05 862
10238 sql 쿼리 질문 드립니다 me3258 2018.06.04 862
10237 LEFT OUTER JOIN 중복관련 질문입니다ㅣ [2] kjw3157 2018.06.04 1922
10236 특정 컬럼에서 연속된 데이터들만 카운트 하는법 질문 드립니다 [3] 스터프 2018.06.04 832
10235 쿼리 질문입니다. 얼음왕자 2018.06.02 584
10234 db의 lock을 강제로 킬하는 타임아웃 설정이 가능한가요? 개발좋아 2018.06.02 665
10233 대용량 테이블(1억건) 인덱스 생성 질문 드립니다. [1] 깜우석 2018.06.01 1415
10232 ISDATE INDEX 관련 질문입니다~! [2] 엔더 2018.06.01 695
» 쿼리 문의드립니다~! [3] 엔더 2018.05.31 750
10230 정말 이상한 사칙연산 결과 질문 드립니다. [1] hackhyun 2018.05.30 941
10229 쿼리 문의 드립니다. l1j2e3 2018.05.30 682
10228 고수님들께 SQL 쿼리작성문 문의드립니다! 브라미 2018.05.29 794
10227 DB서버 이전설치시 가장 좋은 방법은 뭘까요? [3] 이상혁_300342 2018.05.28 1106
10226 Table Join후 건 수(Count) 확인 시 최적화 방법 문의 노란하늘 2018.05.28 740
10225 세개의 테이블 join시 가장 많은 라인수에 따라서 행갯수 표기방법 좀알려주세요. 정명호 2018.05.24 640
10224 IF문 안에 있는 링크드서버(Linked Server) 로그인 [1] NiceHee 2018.05.24 922
10223 프로시저 호출 로그 [2] 봉술의달인 2018.05.24 1052





XE Login