대략 아래와 비슷한
SELECT YMD, SerialNo, 기타필드...
FROM Code
WHERE YMD BETWEEN @StartYMD AND @EndYMD
AND ACode IN (SELECT CompanyCode FROM #Code))
AND BCode IN (SELECT CompanyCode FROM #Code))
해당 테이블의 YMD 가 클러스터 인덱스로 설정되어 있는데요
정상적으로 클러스터 인덱스를 타 범위검색이 상당히 많은양인데도 빠르게 나오고 있습니다.
문제는 where은 완전 같고 필드를 없애고 count로 변경하면
SELECT count(*)
FROM Code
WHERE YMD BETWEEN @StartYMD AND @EndYMD
AND ACode IN (SELECT CompanyCode FROM #Code))
AND BCode IN (SELECT CompanyCode FROM #Code))
만 변경하면 전혀 엉뚱한 넌클러스터 인덱스를 타 던지, 강제로 인덱스를 걸어도 Table Scan을 하던지 하고 있습니다.
컨텐츠 내용보다 Count를 알아 오는 쿼리가 현저하게 속도가 느립니다.
옵티마이져 비교로는 2% vs 98% 정도로 나옵니다.
이런경우 클러스터 필드를 포함한 넌클러스터 인덱스를 다시 하나 더 잡아 줘야하나요?
(잡아 줘봤는데.. 조금 빨라지긴하나 큰효과는 없습니다.
잘 감이 안잡히네요
상당히 많은양이라고 하셨으면....
일단 원래 느린 쿼리이나 첫 번째 결과는 메모리에 상주해 있기 때문에 DB 재시작을 하지 않을 경우에 항상 빨리 나오는 것처럼
보이는게 아닐런지요.... 저도 궁금합니다..;;;