쿼리 문의드립니다~!

엔더 2018.05.31 15:22 Views : 798

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


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


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
Notice SQL강좌: 챗GPT와 함께 배우는 SQL Server 무료 강좌 목차와 소개 (2023년 9월 업데이트) 코난(김대우) 2023.08.18 21871
Notice Python 무료 강좌 - 기초, 중급, 머신러닝(2023년 6월 업데이트) 코난(김대우) 2021.01.01 12245
10240 row data 한줄을 두줄로...(현충일인데 근무중 헬프미..) [1] 촐이 2018.06.06 1086
10239 다중열 서브쿼리 정렬 질문 [1] 정연석6546 2018.06.05 926
10238 sql 쿼리 질문 드립니다 me3258 2018.06.04 917
10237 LEFT OUTER JOIN 중복관련 질문입니다ㅣ [2] kjw3157 2018.06.04 2139
10236 특정 컬럼에서 연속된 데이터들만 카운트 하는법 질문 드립니다 [3] 스터프 2018.06.04 972
10235 쿼리 질문입니다. 얼음왕자 2018.06.02 623
10234 db의 lock을 강제로 킬하는 타임아웃 설정이 가능한가요? 개발좋아 2018.06.02 709
10233 대용량 테이블(1억건) 인덱스 생성 질문 드립니다. [1] 깜우석 2018.06.01 3169
10232 ISDATE INDEX 관련 질문입니다~! [2] 엔더 2018.06.01 731
» 쿼리 문의드립니다~! [3] 엔더 2018.05.31 798
10230 정말 이상한 사칙연산 결과 질문 드립니다. [1] hackhyun 2018.05.30 1024
10229 쿼리 문의 드립니다. l1j2e3 2018.05.30 717
10228 고수님들께 SQL 쿼리작성문 문의드립니다! 브라미 2018.05.29 827
10227 DB서버 이전설치시 가장 좋은 방법은 뭘까요? [3] 이상혁_300342 2018.05.28 1647
10226 Table Join후 건 수(Count) 확인 시 최적화 방법 문의 노란하늘 2018.05.28 1113
10225 세개의 테이블 join시 가장 많은 라인수에 따라서 행갯수 표기방법 좀알려주세요. 정명호 2018.05.24 691
10224 IF문 안에 있는 링크드서버(Linked Server) 로그인 [1] NiceHee 2018.05.24 957
10223 프로시저 호출 로그 [2] 봉술의달인 2018.05.24 1266
10222 데이터 캐싱에 대하여 ( 일반 SAN과 SSD차이가 이렇게 나는지요? [1] 공유맨 2018.05.23 846
10221 날짜별 합계인데 시간이 다른건 어떻게 해야 하나요.... [1] 똘스또이 2018.05.23 1358





XE Login