복붙노트

[SQL] 삽입의 성능을 최대 SQL 속도?

SQL

삽입의 성능을 최대 SQL 속도?

나는 SQL 서버에 대한 몇 가지 테스트를 수행하고 있는데이 가능한 최고의 삽입 속도를 싶어. 명령문 I 사용은이 같은 것입니다 :

INSERT INTO db_Test_databse..tbl_test with(rowlock)  
   (  joinid, date_key,   
      col1, col2,col3,col4, col5, col6, col7, col8, col9, col10,  ...     
   )  

SELECT  tabid as joinid, 
        date_key,
        rec_type,  
        col2,  
        dbo.udf_convert_hex_to_dec(col3),  
        col4, col5, col6, col7, col8,  
        dbo.udf_convert_hex_to_dec(col9),  
        dbo.udf_convert_hex_to_dec(col10),  
        ...
from source_table f

25 열이 있습니다; 대부분의 유형은 BIGINT 또는 INT의이다.

나는 신원 필드 기본 키를 제외하고 대상 테이블의 모든 인덱스를 떨어졌다.

더 성능을 개선하는 방법에 대한 모든 팁?

추신. 이 양식에서 나는 16.000 행 / 초 평균 속도를 가지고있다.

해결법

  1. ==============================

    1.당신이해야 최상의 성능을 얻으려면 :

    당신이해야 최상의 성능을 얻으려면 :

    병렬에서 레코드를 삽입하는 여러 클라이언트가 있습니까? 그렇다면 당신은 또한 잠금 영향을 고려해야합니다.

    SQL 서버는 SQL Server 관리 Studio 또는 데이터베이스 엔진 튜닝 관리자를 통해 쿼리를 실행하여 중 특정 쿼리에 대한 인덱스를 제안 할 수 있습니다. 당신은 SQL Server가 INSERT 속도를 높이기 위해 사용 된 인덱스를 제거하지 않았는지 확인하기 위해이 작업을 수행해야합니다.

    이 여전히 충분히 빨리하지 않으면 당신은 대신 사용하여 대량 삽입 삽입까지 그룹화 고려 (또는 내부적으로 bcp 유틸리티 또는 SqlBulkCopy의, 모두의 사용 벌크 INSERT 같은)해야한다. 행을 삽입 할 때이 가장 높은 처리량을 제공 할 것입니다.

    또한 최적화 대량 가져 오기 성능을 참조 - 그 기사에서 조언을 많이도 "정상"삽입에 적용됩니다.

  2. ==============================

    2.당신은 SqlBulkCopy의를 사용하여 생각 해 봤나? 당신은 DataTable을 구축하고 WriteToServer 루틴에 전달해야합니다.

    당신은 SqlBulkCopy의를 사용하여 생각 해 봤나? 당신은 DataTable을 구축하고 WriteToServer 루틴에 전달해야합니다.

    그것은 FAST입니다!

  3. ==============================

    3.당신은 종료하기 전에 저장 프로 시저에서 사용할 수있는

    당신은 종료하기 전에 저장 프로 시저에서 사용할 수있는

     OPTION(RECOMPILE)
    
  4. from https://stackoverflow.com/questions/7090243/sql-speed-up-performance-of-insert by cc-by-sa and MIT license