2016-08-31 2 views
0

'선택 대상'연산자를 사용할 수 있음을 나타내는 기사 참조를 포함하여 여러 의견을 발견했습니다. 2014+에서 병렬로 실행되며 결과적으로 '삽입'보다 효율적일 수도 있고 그렇지 않을 수도 있습니다.SQL Server 2014 - 데이터베이스간에 한 테이블에서 다른 테이블로 데이터를 이동하는 가장 효율적인 방법은 무엇입니까?

이 사례는 2014 년 같은 인스턴스에서 데이터베이스간에 데이터를 한 테이블에서 다른 테이블로 이동하는 경우입니다. 삽입은 5-10M 행이 될 것이고 효율 만 기록하는 것은 신경 쓰지 않습니다. 사례 별 분석이 아닌 일반적인 권장 사항이 필요합니다.

답변에 영향을 줄 수있는 다른 요소 (행 길이 등)가 있지만 가장 좋은 장소를 찾고 있습니다. 필요한 경우 다른 방법을 시도해 볼 수 있습니다.

다른 테이블의 동일한 테이블에서 한 데이터베이스의 테이블을로드하는 가장 효율적인 방법은 무엇입니까?

미리 감사드립니다.

+0

행 5-10M로,이 조기 최적화의 경우처럼 들린다. –

답변

1

BULK 작업을 수행하는 SSIS (SQL Server Integration Services) 패키지를 제안합니다. 현재 5M 행은 중요하지 않지만

"의존적"이므로 저장하려는 내용을 이해하는 데 도움이됩니다. INSERT INTO는 자체 포함되어 있고 "쉽다"라는 점에서 매우 좋습니다. 이것이 한 번 거래라면이 방법으로 그것을 할 수도 있고 그것에 대해 생각하지 않을 수도 있습니다.

그러나 매일 10M 레코드를 삽질하는 경우 예약 된 SSIS 스크립트를 고려할 수 있습니다. 스크립트를 유지 관리하는 데 오버 헤드가 있지만 일반적으로 더 빠릅니다. 테스트 목적으로 데이터를 다시로드하는 경우 (기준선으로 재설정) SSIS 패키지는 좋은 방법입니다.

또한이 문서에서 볼 수 있습니다 https://dba.stackexchange.com/questions/99367/insert-into-table-select-from-table-vs-bulk-insert

+0

ripvlan에게 감사드립니다. 내 요구 사항은 실제로 테이블 이름을 받아들이고 데이터 이동을 수행하는 저장 프로 시저를 작성하는 것입니다. 테이블 이름을 받아들이는 패키지를 만드는 방법이 있다면, 그렇게 선택하는 것이 좋을 것이다. 필 브램머 (Phil Brammer)가 2009 년에 SSIS 패키지를 작성하고 테이블 이름을 변수로 전달할 수 있는지 묻는 게시물을 찾았습니다. 그는 꽤 나쁜 생각이라고 대답했습니다. 그게 바뀌 었는지 알아? – TheyMadeMeTheDBA

+0

데이터 복사를위한 변수 테이블 이름이 나에게 좋지 않은 것처럼 들립니다. 나는 당신이 어떤 특정한 일을하는 방법에 초점을 맞추기보다는 당신의 비즈니스 문제가 무엇인지에 대한보다 높은 시각을 제공 할 것을 제안합니다. 나는 당신이하려는 일이 완전히 다른 방식으로 훨씬 잘 처리 될 가능성이 다소 높다고 생각합니다. – btberry

+0

일반적인 보안 문제로 복사하고 멀리 날려 보내는 스크립트는 일반적으로 좋은 생각이 아닙니다. (50을 말합니다) 테이블 중 -이 서비스를받을 자격이 있습니까? 이 스크립트를 작성하는 것은 가능할 수 있지만 추한 것입니다. SSIS를 사용하여 외부 소스로부터받은 데이터 (매일)를 가져옵니다. 그러나 나는 그 데이터가 어디로 가고 왜 있는지 정확히 알고 있습니다. – ripvlan

관련 문제