큰 테이블이있는 2008 SQL 서버가 있고 여러 열에 대해 COUNT DISTINCT 쿼리를 결합해야합니다. 일부 열은 varchar이고 다른 열은 int입니다.연결된 열에서 검색 할 때 성능이 향상됩니다.
는쿼리는 지금까지 다음과 같습니다
SELECT
CAST(datepart(yyyy, [HistDate]) as varchar(4)) + '-' + CAST(datepart(mm, [HistDate]) as varchar(2)) + '-1' AS [DateSelector],
[Document] AS [Document],
-- This is the bit that needs optimizing
COUNT(DISTINCT(
Document +
Reference +
CONVERT(varchar(20),BatchID) + -- this is an int
ISNULL(CONVERT(varchar(20),ResetCount),'')) -- this is an int
FROM documents
GROUP BY
CAST(datepart(yyyy, [HistDate]) as varchar(4)) + '-' + CAST(datepart(mm, [HistDate]) as varchar(2)) + '-1' AS [DateSelector],
[Document] AS [Document],
ORDER BY ...
현재이 쿼리는 COUNT (*)로 위의 COUNT를 교체 반면, 23 초 소요 몇 초를했다. 나는 0 개의 개선을 가져온 결합 된 인덱스를 추가하려고 시도했다. 검색 속도를 높이려면 어떤 종류의 최적화를 할 수 있습니까?
나는 _DateSelector_ 및 인덱싱 그것에 대한 계산 된 열을 만드는 건의 할 것입니다. 그러나 DML 작업에 오버 헤드가 추가됩니다. 테이블의 수정/검색 속도는 무엇입니까? –
@VishalGajjar 이것은 성능에 조금 도움이 될 수 있지만 성능 문제는 질문과 제목에 따라 코드의 다른 곳에 있습니다 –