MySQL 단일 쿼리로 여러 값 한 번에 삽입하는 가장 빠른 방법
여러 개의 데이터를 테이블에 삽입할 때, 각 행마다 별도의 INSERT 문을 반복해서 실행하는 것은 매우 비효율적입니다. 아래와 같은 방식은 피해야 합니다.
insert into yourTableName values(yourValue1,yourValue2,...N);
insert into yourTableName values(yourValue1,yourValue2,...N);
insert into yourTableName values(yourValue1,yourValue2,...N);
.
.
.
N
가장 빠른 방법은 하나의 INSERT 문 안에 여러 개의 값 목록을 쉼표(,)로 구분하여 나열하는 것입니다.
insert into yourTableName values(yourValue1,yourValue2,...N),(yourValue1,yourValue2,...N),
(yourValue1,yourValue2,...N),...................N;
이 방식은 네트워크 왕복 횟수와 쿼리 파싱 오버헤드를 크게 줄여주기 때문에, 대량의 데이터를 삽입할 때 실행 속도가 눈에 띄게 향상됩니다.
예제 1: 테이블 생성하기
먼저 예제에 사용할 테이블을 생성해 보겠습니다.
mysql> create table DemoTable1466
-> (
-> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> Name varchar(20),
-> Age int
-> );
Query OK, 0 rows affected (0.98 sec)
예제 2: 여러 행 한 번에 삽입하기
INSERT 명령 하나로 세 개의 레코드를 동시에 삽입합니다.
mysql> insert into DemoTable1466(Name,Age) values('Chris',25),('David',29),('Mike',32);
Query OK, 3 rows affected (0.10 sec)
Records: 3 Duplicates: 0 Warnings: 0실행 결과를 보면 세 개의 행이 단 한 번의 쿼리 실행으로 삽입되었으며, 소요 시간은 0.10초에 불과합니다. 행 수가 많아질수록 이 방식의 속도 이점은 더욱 커집니다.
예제 3: 삽입된 데이터 확인하기
SELECT 문으로 테이블의 모든 레코드를 조회합니다.
mysql> select * from DemoTable1466;
실행 결과는 다음과 같습니다.
+----+-------+------+
| Id | Name | Age |
+----+-------+------+
| 1 | Chris | 25 |
| 2 | David | 29 |
| 3 | Mike | 32 |
+----+-------+------+
3 rows in set (0.00 sec)
이처럼 다중 VALUES 절을 활용하면 코드가 간결해질 뿐만 아니라 성능도 크게 개선됩니다. 따라서 대량의 데이터를 삽입해야 하는 상황이라면, 행마다 INSERT 문을 반복 실행하는 대신 하나의 쿼리에 여러 값을 묶어서 처리하는 습관을 들이는 것이 좋습니다.