나는 TVF를 가지고 있으며 그 안에 테이블 변수를 사용합니다. 마지막 단계 중 하나는 여러 줄을 지우는 것입니다. 정확히이 쿼리는 런타임을 크게 늘립니다. 임시 테이블을 사용하여 코드를 변경하면 런타임이 다시 줄어들지 만 불행히도 임시 테이블은 TVF에서 사용하지 않아야합니다. TVF를 SPROC로 변경할 수 없습니다.TVF의 테이블 변수 대신
성능을 향상시키는 방법에 대한 아이디어가 있으십니까?
TVF의 모든 부분을 느리게하는 부분 만 추가했습니다. 그 전에는 타임 스탬프가 수집되어 @Result
으로 사전 처리됩니다. @C
collects에는 현재 수정해야하는 ID가 포함됩니다. 위의 코드가 업데이트없이 실행하면
UPDATE R
SET starttime = CASE R."myFunction"
WHEN 1 THEN Date1
WHEN 0 THEN Date2
END
FROM @Result AS R
WHERE EXISTS (
SELECT
NULL
FROM @c AS c
WHERE c."id" = R."id")
은 거의 즉시 실행, 그래서 나는 오른쪽 양면 기능은 병목 현상이라고 생각합니다. SET starttime...
을 고정 값으로 변경하더라도 런타임은 거의 동일하게 유지됩니다. @Result
은 약 250.000 라인, @c
약 20.000을 유지합니다. 이미 테이블 바스에 인덱스를 추가했습니다. 큰 성공을 거두지 않았습니다.
을 내가 당신을 제안 할 경우에만 새와 함께 새로운 @table_variable을 만들려고하는' starttime'과'id' 그리고 나중에 @Result 테이블과 JOIN하여 최종 결과를 생성합니다. 요점은 INSERT에 UPDATE를 대체하고 나중에 EXISTS가 중요한 차이를 만들지 않고 나중에 JOIN –