BULK INSERT
또는 bcp
45,000 개의 insert 문보다 더 적절한 옵션으로 보입니다.
insert 문을 고수 해야하는 경우 몇 가지 옵션을 고려할 것입니다.
A : 로그와 배치에 대한 영향을 최소화하기 위해 각각 하나에 100 또는 500 또는 1000 개의 명세서로 트랜잭션 및 랩 배치를 사용하십시오. 예 :
BEGIN TRANSACTION;
INSERT dbo.table(a, ...) SELECT 1, ...
INSERT dbo.table(a, ...) SELECT 2, ...
...
INSERT dbo.table(a, ...) SELECT 500, ...
COMMIT TRANSACTION;
GO
BEGIN TRANSACTION;
INSERT dbo.table(a, ...) SELECT 1, ...
INSERT dbo.table(a, ...) SELECT 2, ...
...
INSERT dbo.table(a, ...) SELECT 500, ...
COMMIT TRANSACTION;
GO
B : 개별 삽입 문 대신 UNION ALL
한 번에 100 또는 500 문을 사용하십시오. 예 :
INSERT dbo.table(a, ...)
SELECT 1, ...
UNION ALL SELECT 2, ...
...
UNION ALL SELECT 500, ...
GO
INSERT dbo.table(a, ...)
SELECT 501, ...
UNION ALL SELECT 502, ...
...
UNION ALL SELECT 1000, ...
GO
간결성을 위해 오류 처리를 남겼지 만 요점은 45,000 개의 개별 문을 단일 배치로 SQL Server에 보내려고 시도하지 않는다는 것입니다.