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

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

쿼리 문의드립니다~!

엔더 2018.05.31 15:22 Views : 752

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


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


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
10249 데이터 파일 자동 증가 옵션이 시작되는 시점 문의 [1] hardsqlhard 2018.06.14 850
10248 alwayson 이중화 구성시 문의 [1] cococo 2018.06.14 797
10247 sql server 2000 에서 2008 업그레이드시 2000 호환문제 [1] 슈토파이터 2018.06.12 759
10246 안녕하세요 질문있어서 글을 씁니다. snoopy_123 2018.06.12 525
10245 컴퓨터 이름을 바꾸었더니 "your sql server,...."에러가 뜹니다.. [1] 듣기평가 2018.06.11 893
10244 select 에서 채번쿼리 문의드립니다 선배님들 도와주세요ㅠㅠ dkfkqldy1 2018.06.11 792
10243 테이블 2개 조건을 이용하여 데이터 삭제방법 문의 [1] 노란하늘 2018.06.11 793
10242 날짜비교 (형변환) 질문 드립니다. [1] 비폭력무저항 2018.06.08 811
10241 제발 부탁드립니다 하 [1] fjfjfj 2018.06.07 1389
10240 row data 한줄을 두줄로...(현충일인데 근무중 헬프미..) [1] 촐이 2018.06.06 979
10239 다중열 서브쿼리 정렬 질문 [1] 정연석6546 2018.06.05 871
10238 sql 쿼리 질문 드립니다 me3258 2018.06.04 869
10237 LEFT OUTER JOIN 중복관련 질문입니다ㅣ [2] kjw3157 2018.06.04 2010
10236 특정 컬럼에서 연속된 데이터들만 카운트 하는법 질문 드립니다 [3] 스터프 2018.06.04 836
10235 쿼리 질문입니다. 얼음왕자 2018.06.02 584
10234 db의 lock을 강제로 킬하는 타임아웃 설정이 가능한가요? 개발좋아 2018.06.02 667
10233 대용량 테이블(1억건) 인덱스 생성 질문 드립니다. [1] 깜우석 2018.06.01 1565
10232 ISDATE INDEX 관련 질문입니다~! [2] 엔더 2018.06.01 695
» 쿼리 문의드립니다~! [3] 엔더 2018.05.31 752
10230 정말 이상한 사칙연산 결과 질문 드립니다. [1] hackhyun 2018.05.30 941





XE Login