두 개의 테이블이 있습니다. 하나는 약 1500 개의 레코드가 있고 다른 하나에는 약 300000 개의 하위 레코드가 있습니다. 약 1 : 200 비율. 부모 테이블을 스테이징 테이블 인 SomeParentTable_Staging으로 스테이지 한 다음 모든 자식 레코드를 스테이징합니다. 그러나 부모 테이블에 준비된 레코드와 관련된 스테이션 만 원합니다. 그래서 아래의 쿼리를 사용하여 부모 테이블의 스테이지 데이터에 가입하여이 스테이징을 수행합니다.동일한 쿼리에는 INSERT와 함께 사용할 때 중첩 루프가 있지만
--Stage child records
INSERT INTO [dbo].[SomeChildTable_Staging]
([SomeChildTableId]
,[SomeParentTableId]
,SomeData1
,SomeData2
,SomeData3
,SomeData4
)
SELECT [SomeChildTableId]
,D.[SomeParentTableId]
,SomeData1
,SomeData2
,SomeData3
,SomeData4
FROM [dbo].[SomeChildTable] D
INNER JOIN dbo.SomeParentTable_Staging I ON D.SomeParentTableID = I.SomeParentTableID;
실행 계획은 테이블이 중첩 루프로 조인되고 있음을 나타냅니다. 삽입없이 쿼리의 선택 부분 만 실행하면 해시 일치로 조인이 수행됩니다. 따라서 select 문은 동일하지만 삽입 컨텍스트에서 느린 중첩 루프를 사용합니다. 조인 양쪽에 인덱스가 있도록 D.SomeParentTableID에 클러스터되지 않은 인덱스를 추가했습니다. I.SomeParentTableID는 클러스터 된 인덱스가있는 기본 키입니다.
왜 조인을 사용하는 삽입에 중첩 루프를 사용합니까? 삽입에 대한 조인의 성능을 향상시킬 수있는 방법이 있습니까?
SELECT ... INTO에 대한 실행 계획을 보았습니까? – ig0774