나는 갱신 트리거 U
이 정의 된 데이터베이스 D1
에서보기 V
이 그 업데이트 세 개의 테이블 T1
, T2
및 T3
데이터베이스 D2
. 이 세 테이블은 0.75, 6.0 &450 만 개의 레코드를 포함합니다. SQL Server 버전은 Developer Edition 9.0.3042입니다. 나는 위의보기에서 다음 업데이트 문을 수행 할 때성능 문제 SQL Server의 커서를 통해 (AN 대신 트리거의 사용)보기를 업데이트 할 때 2005
그것이 두 번째 내에서 준비 : 내가 걸리는 다음 배치를 발행 할 때
UPDATE V
SET cust_task_id = 11975628
WHERE custno = '0319607'
그러나 일분 12 초 완료 :
DECLARE CURSOR c
FOR SELECT custno, cust_task_id FROM V WHERE custno = '0319607'
FOR UPDATE OF cust_task_id
OPEN c
FETCH NEXT FROM c
UPDATE V
SET cust_task_id = 11975628
WHERE CURRENT OF c
CLOSE c
DEALLOCATE c
SQL Server 2000 (8.0.2039, Standard Edition) 2000 버전에서 동일한 데이터베이스 (정의 및 레코드 수와 관련하여)와 동일한 업데이트 문을 사용하면 두 배치가 모두 1 초 이내에 반환됩니다!
당신은 당신이 2000 년 계획은 인덱스가 추구 사용하는 반면 2005 년 계획이 테이블 T1
, T2
및 T3
에 인덱스 스캔을 사용하고 있음을 알는 SQL 서버의 두 가지 버전의 커서 배치의 쿼리 계획을 볼 때. 그래서 그것은 성능 차이를 설명합니다.
2005 년 데이터베이스에서 sp_updatestats
을 시도했지만 도움이되지 않았습니다.
아무에게도 어떻게하면 2005 년 커서 배치를 가져 와서 어떻게해야하는지 알 수 있습니까 ??
시간을내어이 문제를 조사해 주셔서 감사합니다.
인사말,
렉스 베어벡
Hello Eoin thanx는 응답하지만 두 데이터베이스의 정의는 같습니다. 따라서 색인이 누락되지 않습니다. –