내가 SQL의이 비트를 결합UPDATE 성능
DECLARE @tmpTable TABLE(idTransaction int PRIMARY KEY, Value money)
DECLARE @idStatement int = 0
UPDATE T
SET idStatement = @idStatement
FROM tbl_Transaction T
INNER JOIN @tmpTable ST on T.id = ST.idTransaction
테이블 tbl_Transaction는 (i가의 gunna이의 원인이 될 생각)하지만, 약 25 만 행이 나는 쿼리 등을 실행할 때 tmpTable이 완전히 비어 있고 조인이 행을 갱신하지 않더라도 약 650ms가 걸립니다.
나는 이것이 UPDATE의 작동 방식과 관련이 있다고 생각하지만, 그 이유에 대해 누구도 밝힐 수 있습니까? 행 수를 확인할 수있는 빈 테이블에 대해 알고 있지만 tmpTable에 행이있을 때 이것이 내 쿼리의 성능에 영향을 주는지 알고 싶습니다.
모든 조언을 크게 듣습니다.
tbl_Transaction.id에 대한 인덱스가 있습니까? 그렇다면 실행 계획에서'인덱스 탐색 (Index Seek) '을 볼 수 있어야하며 꽤 빠르다. 테이블 스캔을보고 있다면 성능을 확실히 설명 할 수 있습니다. –
tbl_Transaction에는 해당 id에 대한 색인이 있습니다. 나는 그 실행 계획을 완전히 잊었다. 그것을 실행하면 실제로는 삽입 성능이 가장 큰 tbl_Transaction에있는 삽입 트리거 인 것처럼 보입니다. \ 삽입을 실제로하지 않았으므로 그 경우가 될 것이라고 예상하지 못했습니다. –
동일한 것을 업데이트하면 트리거가 실행됩니다. 따라서 문에 where 절을 추가해야합니다. idStatement가 NULL이거나 idStatement가> @idStatement 인 경우 –