SQLServer에서 대량으로 데이터를 삽입하는 방식의 성능 비교
8582 단어 sqlserver
회사 기술 배경: 데이터베이스 접근 클래스(xxx.DataBase.Dll)는 저장 프로세스를 호출하여 데이터베이스에 접근합니다.
기술 시나리오 1:
압축 시간에 프로그래머가 쓴 첫 번째 버전은 단지 임무를 완성하기 위해 프로그램에서 어떠한 최적화도 하지 않았다. 실현 방식은 데이터베이스 액세스 클래스를 이용하여 저장 과정을 호출하고 순환을 이용하여 조목조목 삽입하는 것이다.분명히 이런 방식은 효율이 높지 않아서 앞의 두 동료가 효율이 낮은 문제를 토론했다.
기술 시나리오 2:
빅데이터 양의 대량 삽입을 고려했기 때문에, 나는 ADO를 생각했다NET2.0의 새로운 기능: SqlBulkCopy.이것과 관련된 성능은 오래 전에 내가 직접 성능 테스트를 한 적이 있는데 효율이 매우 높다.이것도 내가 회사 동료에게 추천한 기술 방안이다.
기술 시나리오 3:
SQLServer2008의 새로운 특성인 테이블 값 매개변수(Table-Valued Parameter)를 사용합니다.테이블 값 매개 변수는 SQLServer 2008에서만 얻을 수 있는 새로운 특성입니다. 이 새로운 특성을 사용하면 우리는 하나의 테이블 유형을 매개 변수로 함수나 저장 프로세스에 전달할 수 있습니다.그러나 테이블 값 매개 변수는 1000개 이하의 줄을 삽입할 때 실행 성능이 좋다는 특징도 있다.
기술 시나리오 4:
단열 필드에 대해 삽입할 데이터를 문자열로 연결하고 마지막으로 저장 과정에서 수조로 나누어 조목조목 삽입할 수 있다.저장 과정에서 매개 변수의 문자열의 최대 길이를 조사한 다음에 필드의 길이를 나누어 하나의 값을 계산하면 요구를 충족시킬 수 있는 것이 분명하다. 그러나 이런 방식은 첫 번째 방식과 비교하면 향상된 것이 없는 것 같다. 왜냐하면 원리는 모두 같기 때문이다.
기술 시나리오 5:
비동기 생성, 메시지 대기열 등을 고려합니다.이런 방안은 설계적으로든 개발적으로든 난이도가 있다.
기술 방안 1은 틀림없이 취소될 것이다. 나머지는 기술 방안 2와 기술 방안 3 사이에 선택을 하는 것이다. 회사의 현재 상황을 감안하면 기술 방안 4와 기술 방안 5는 먼저 고려하지 않는다.
다음에 표 값 매개 변수의 생성과 호출에 대해 더 감성적인 인식을 가지도록 제가 좀 더 상세하게 쓰겠습니다. 글도 좀 길어질 수 있고 디테일에 관심이 없는 분들은 점프적인 읽기 방식을 선택할 수 있습니다.
다시 한 번 테스트 방안을 말씀드리자면 테스트는 모두 세 조로 나뉘는데 한 조는 삽입 수량이 1000보다 적고 다른 두 조는 삽입 데이터량이 1000보다 많은 (이곳에서 우리는 각각 10000과 1000000을 취한다). 한 조는 10회로 나누어 평균치를 취한다.어떻게 해도 알겠다, 렛츠 고!
1. 테이블을 만듭니다.
다음 그림과 같이 테이블의 필드는 하나만 있습니다.
2. 테이블 값 매개변수 유형 생성하기
Query Analyzer를 연 다음 Query Analyzer에서 다음 코드를 실행합니다.
Create Type PassportTableType as Table
(
PassportKey nvarchar(50)
)
성공적으로 실행된 후에 우리는 기업 관리자를 열고 다음 노드인 데이터베이스, 프로그래밍 가능성, 유형, 사용자 정의 테이블 유형을 순서대로 펼치면 우리가 만든 테이블 값 유형을 다음과 같이 볼 수 있다.
우리가 테이블 값 형식을 만드는 데 성공했다는 것을 설명합니다.
3. 저장 프로세스 작성
저장 프로세스의 코드는 다음과 같습니다.
USE [TestInsert]
GO
/****** Object: StoredProcedure [dbo].[CreatePassportWithTVP] Script Date: 03/02/2010 00:14:45 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Kevin>
-- Create date: <2010-3-1>
-- Description: < >
-- =============================================
Create PROCEDURE [dbo].[CreatePassportWithTVP]
@TVP PassportTableType readonly
AS
BEGIN
SET NOCOUNT ON;
Insert into Passport(PassportKey) select PassportKey from @TVP
END
, , ( ), ,
,
4. 코드 호출 저장 프로세스를 작성한다.
세 가지 데이터베이스의 삽입 방식 코드는 다음과 같다. 시간이 비교적 촉박하기 때문에 코드는 쉽게 읽을 수 없을 것이다. 특히 코드는 내가 주석을 좀 넣었다.
주요 부분의 코드
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
우분투에 SQL 서버 설치Microsoft SQL Server는 오늘날 업계에서 가장 눈에 띄는 데이터베이스 중 하나입니다. 이번 포스팅에서는 우분투에 설치하는 방법을 알려드리겠습니다. sudo 권한이 있는 계정 1단계: 터미널 열기 단축키...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.