1
여러 프로젝트 (데이터베이스)에서 일부 레코드를 임시 테이블로 동적으로 수집하고 테이블에 삽입하려는 임시 테이블에서 동적으로 수집하는 절차를 만들었습니다. WHERE
성명으로,하지만 불행히도 내가 실행 계획을 확인했을 때,이 쿼리 부분은 많은 부하를 짊어 져야한다는 것을 알게되었습니다. 이 INSERT
부분 또는 WHERE
부분을 어떻게 최적화 할 수 있습니까?SQL 임시 테이블에서 테이블에 삽입을 최적화하는 방법
INSERT INTO dbo.PROJECTS_TESTS (PROJECTID, ANOTHERTID, DOMAINID, is_test)
SELECT * FROM #temp_Test AS tC
WHERE NOT EXISTS (SELECT TOP 1 1
FROM dbo.PROJECTS_TESTS AS ps WITH (NOLOCK)
WHERE ps.PROJECTID = tC.projectId
AND ps.ANOTHERTID = tC.anotherLink
AND ps.DOMAINID = tC.DOMAINID
AND ps.is_test = tC.test_project
)
같은
또는 어떤이는 (NOLOCK)를 사용하지 않는 프로덕션 환경의 경우. 실행 계획을 보여주고 왜이 쿼리가 성능이 좋지 않다고 생각하십니까? PROJECTS_TESTS 테이블에 어떤 인덱스가 있습니까? –
1. #temp projectId, anotherLink, DOMAINID, test_project에 색인을 작성하십시오. 2. 필요 없음 @TOP 1 1 @ 3. 삭제 NOLOCK –