ㅁ 배경
특정 쿼리문이 속도가 느리다는 문의가 왔다.
분명히 PK에 인덱스에 모든 것이 다 설정되어 있고
이런저런 쿼리 개선을 해도 속도가 크게 나아지지 않는다.
ㅁ 원인 및 조치
아래 CNTRCT_NO 컬럼은 PK열값이다. PK는 기본 NOT NULL인데 조건에서 이 컬럼에 ISNULL() 및 IS NOT NULL 등의 널값 체크를 걸면 INDEX가 풀려 속도가 느려진다.
원래 일반 컬럼으로 사용하다가 중간에 PK로 잡힌 컬럼으로 보인다.
일반컬럼일 때 설정된 IS NOT NULL 조건문이 문제가 되었다.
아래의 조건문을 주석처리하여 속도를 향상한다.
AND CTRTC.CNTRCT_NO IS NOT NULL
또는
AND ISNULL(CTRTC.CNTRCT_NO IS NOT NULL
참고사이트 :
https://support.microsoft.com/ko-kr/help/3051225/a-filtered-index-that-you-create-together-with-the-is-null-predicate-i
'IT 공부 > SQL, DB' 카테고리의 다른 글
[MS SQL] FOR XML PATH와 STUFF 활용 (0) | 2018.11.28 |
---|---|
[MS SQL] split 분할 반환 함수 (문자형, 정수형) (0) | 2018.11.28 |
[MS SQL] 과거 5개년 년도 보여주기 (다중테이블반환 함수, 임시테이블 활용) (0) | 2018.11.06 |
[MySQL] 한글 문자 ???? 깨져서 저장되는 현상 (UTF8) (0) | 2018.10.31 |