대량 삽입(bulk insert) 대량 데이터 임포트에는 전문 명령 및 유틸리티가 사용됩니다: BULK INSERT, COPY, LOAD DATA INFILE, 외부 도구인 bcp (SQL Server), psql (PostgreSQL) 및 ETL 도구.
PostgreSQL의 예:
COPY staging_table (id, name, age) FROM '/path/to/data.csv' DELIMITER ',' CSV HEADER; -- 데이터 검증 후 프로덕션 테이블로 이동 INSERT INTO prod_table (id, name, age) SELECT id, name, age FROM staging_table WHERE age >= 0 AND name IS NOT NULL;
질문: 인덱스가 있는 큰 테이블에 bulk insert를 한 후 후속 작업의 성능 저하를 경험할 수 있는 이유는 무엇인가요?
답변: bulk insert는 테이블에 직접 데이터를 삽입하고, 인덱스는 주요 임포트가 완료된 후에만 재구성/업데이트되므로 테이블이 잠기고 자원이 소모될 수 있습니다. 임포트 중에는 보조 인덱스를 비활성화하고 종료 후 재구성하거나 배치 처리를 하는 것이 좋습니다.
사례
물류 프로젝트에서 BULK INSERT를 통해 수백만 개의 행을 임포트했지만 임시 테이블 없이 수행하여 잘못된 데이터가 잘못된 정보로 인덱스를 채워 FK 및 체크 제약 조건으로 인해 불량 행의 일부를 "롤백"할 수 없었습니다. 데이터 정리를 수동으로 수행해야 했습니다.
사례
기업 서비스에서 bulk insert는 수치가 10배로 증가했습니다. 데이터가 업로드되는 동안 보조 인덱스가 비활성화되지 않았고 각 단계에서 인덱스 구조가 재계산되었습니다.
사례
핀테크 제품에서 대용량 파일을 업로드할 때 bulk insert가 오류 코드를 제대로 처리하지 않아 중요 정보의 일부를 잃어버리고 며칠 후 외부 출처와의 검토 후에야 발견되었습니다.