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

MySQL INSERT 속도를 높이는 방법 – 트랜잭션으로 다중 레코드 한 번에 삽입하기

MySQL에서 여러 개의 레코드를 동시에 삽입할 때는 다음과 같은 문법을 사용하면 INSERT 작업 속도를 크게 높일 수 있습니다.

START TRANSACTION
insert into insertDemo(yourColumnName1,yourColumnName2,...N) values(yourValue1,yourValue2,....N),(yourValue1,yourValue2,....N),.......N
commit

핵심 원리: 기본 설정(autocommit 모드)에서는 INSERT 문 하나하나마다 디스크에 로그를 기록하고 동기화하는 작업이 반복되어 속도가 느려집니다. 반면 START TRANSACTION으로 여러 삽입 작업을 하나의 트랜잭션으로 묶고 마지막에 commit을 한 번만 실행하면 디스크 동기화 횟수가 크게 줄어들어 전체 처리 속도가 향상됩니다.

1단계: 데모 테이블 생성

먼저 실습에 사용할 데모 테이블을 만들어 보겠습니다.

mysql> create table insertDemo
    -> (
    -> StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> StudentName varchar(20),
    -> StudentAge int
    -> );
Query OK, 0 rows affected (0.72 sec)

StudentId는 AUTO_INCREMENT로 설정되어 있어 데이터 삽입 시 번호가 자동으로 부여됩니다.

2단계: 여러 레코드 한 번에 삽입

트랜잭션을 시작한 뒤, VALUES 절에 여러 행의 값을 나열하여 6개의 레코드를 한 번에 삽입합니다.

mysql> START TRANSACTION;
Query OK, 0 rows affected (0.00 sec)
mysql> insert into insertDemo(StudentName,StudentAge) values('John',21),('Carol',22),('Bob',21),('David',24),
    -> ('Maxwell',25),('Mike',22);
Query OK, 6 rows affected (0.00 sec)
Records: 6 Duplicates: 0 Warnings: 0
mysql> commit;
Query OK, 0 rows affected (0.14 sec)

실행 결과를 보면 6개의 레코드가 단 한 번의 INSERT 문으로 성공적으로 삽입된 것을 확인할 수 있습니다.

3단계: 결과 확인

SELECT 문을 사용하여 테이블에 저장된 모든 레코드를 조회합니다.

mysql> select *from insertDemo;

다음은 실행 결과입니다.

+-----------+-------------+------------+
| StudentId | StudentName | StudentAge |
+-----------+-------------+------------+
|         1 | John        |         21 |
|         2 | Carol       |         22 |
|         3 | Bob         |         21 |
|         4 | David       |         24 |
|         5 | Maxwell     |         25 |
|         6 | Mike        |         22 |
+-----------+-------------+------------+
6 rows in set (0.00 sec)

AUTO_INCREMENT가 적용된 StudentId 컬럼에는 1부터 순차적인 번호가 자동으로 부여되었으며, 모든 데이터가 정상적으로 저장된 것을 확인할 수 있습니다. 대량의 데이터를 삽입할 때는 이처럼 트랜잭션으로 묶어 처리하면 성능을 효과적으로 개선할 수 있습니다.