Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL 테이블에 대량의 행을 삽입하는 가장 빠른 방법은 무엇일까?

MySQL에서 다수의 행을 한 번에 삽입할 때 가장 빠른 방법은 INSERT INTO 문을 단 한 번만 실행하고, 여러 개의 값 그룹을 쉼표로 구분하여 하나의 쿼리로 처리하는 것입니다. 이 방식은 행마다 INSERT 문을 반복 실행하는 것보다 네트워크 오버헤드와 파싱 비용을 크게 줄여주는 최적화된 기법입니다.

최적화된 INSERT 문 기본 문법

insert into yourTableName values(NULL,'yourValue1','yourValue2'),(NULL,'yourValue1','yourValue2'),....N;

위 문법처럼 AUTO_INCREMENT 컬럼에는 NULL을 전달하면 MySQL이 자동으로 고유 ID를 생성해 줍니다.

예제 테이블 생성

먼저 예제에 사용할 테이블을 생성합니다.

mysql> create table DemoTable1839
     (
     ClientId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
     ClientName varchar(20),
     ClientAge int
     );
Query OK, 0 rows affected (0.00 sec)

단일 INSERT 문으로 여러 행 삽입하기

insert 명령을 사용해 여러 레코드를 한 번에 삽입합니다. 아래 예제에서는 하나의 INSERT 문으로 8개의 행을 동시에 추가했습니다.

mysql> insert into DemoTable1839 values(NULL,'Chris',29),(NULL,'Chris',29),(NULL,'Chris',29),(NULL,'Chris',29),(NULL,'Chris',29),(NULL,'Chris',29),(NULL,'Chris',29),(NULL,'Chris',29);
Query OK, 8 rows affected (0.00 sec)
Records: 8  Duplicates: 0  Warnings: 0

삽입된 데이터 확인하기

select 문으로 테이블의 모든 레코드를 조회하여 정상적으로 삽입되었는지 확인합니다.

mysql> select * from DemoTable1839;

실행 결과는 다음과 같습니다.

+----------+------------+-----------+
| ClientId | ClientName | ClientAge |
+----------+------------+-----------+
|        1 | Chris      |        29 |
|        2 | Chris      |        29 |
|        3 | Chris      |        29 |
|        4 | Chris      |        29 |
|        5 | Chris      |        29 |
|        6 | Chris      |        29 |
|        7 | Chris      |        29 |
|        8 | Chris      |        29 |
+----------+------------+-----------+
8 rows in set (0.00 sec)

왜 이 방법이 더 빠를까?

각 행마다 별도의 INSERT 문을 실행하면 매번 쿼리 파싱과 서버 왕복 통신이 발생합니다. 반면 하나의 INSERT 문에 여러 값을 묶어서 실행하면 이 과정이 단 한 번만 일어나기 때문에, 특히 수천~수백만 건의 대량 데이터를 삽입할 때 성능 차이가 매우 큽니다. 추가로 max_allowed_packet 설정값을 적절히 조정하면 더 많은 행을 한 번에 처리할 수 있습니다.