> 데이터 베이스 > MySQL 튜토리얼 > 문에 삽입을 최적화하는 방법에 대한 팁 공유

문에 삽입을 최적화하는 방법에 대한 팁 공유

零下一度
풀어 주다: 2017-05-18 15:49:33
원래의
3266명이 탐색했습니다.

문 성능 분석을 구현하기 위한 MYSQL 배치 삽입 데이터베이스

테이블 구조는 다음과 같다고 가정합니다

코드는 다음과 같습니다

CREATE TABLE example (
example_id INT NOT NULL,
name VARCHAR( 50 ) NOT NULL,
value VARCHAR( 50 ) NOT NULL,
other_value VARCHAR( 50 ) NOT NULL
)
로그인 후 복사

일반적으로 단일 삽입을 작성합니다. SQL 문은 다음과 같습니다.

코드는 다음과 같습니다.

INSERT INTO example
(example_id, name, value, other_value)
VALUES
(100, 'Name 1', 'Value 1', 'Other 1');
로그인 후 복사

MySQL에서는 다음과 같은 SQL 문에 데이터를 일괄 삽입할 수 있습니다.

코드는 다음과 같습니다. 다음과 같이

INSERT INTO example
(example_id, name, value, other_value)
VALUES
(100, 'Name 1', 'Value 1', 'Other 1'),
(101, 'Name 2', 'Value 2', 'Other 2'),
(102, 'Name 3', 'Value 3', 'Other 3'),
(103, 'Name 4', 'Value 4', 'Other 4');
로그인 후 복사

를 삽입하면 컬럼의 순서가 테이블의 컬럼 순서와 일치하는 경우 다음 sql

에 컬럼 이름 정의를 생략할 수도 있습니다. 코드는 다음과 같습니다

INSERT INTO example
VALUES
(100, 'Name 1', 'Value 1', 'Other 1'),
(101, 'Name 2', 'Value 2', 'Other 2'),
(102, 'Name 3', 'Value 3', 'Other 3'),
(103, 'Name 4', 'Value 4', 'Other 4');
로그인 후 복사

위 내용은 문제가 없을 것 같습니다. 아래의 sql 문을 사용하겠습니다. 아래에서 최적화 팁을 별도로 테스트해보겠습니다. 200만 개의 데이터를 빈 데이터에 삽입하는 것입니다. table

첫 번째 방법 : insert into를 사용하여 삽입합니다. 코드는 다음과 같습니다.

$params = array('value'=>'50');
set_time_limit(0);
echo date("H:i:s");
for($i=0;$i<2000000;$i++){
$connect_mysql->insert($params);
};
echo date("H:i:s");
로그인 후 복사

마지막 표시: 23:25:05 01:32: 05, 즉 2시간 이상 걸렸습니다!

두 번째 방법: 트랜잭션 제출 및 일괄 삽입 사용 데이터베이스에 마지막으로 표시되는 시간(10W 항목마다 제출)은 22:56입니다. :13 23:04:00, 총 8분 13초 코드는 다음과 같습니다.

echo date("H:i:s");
$connect_mysql->query(&#39;BEGIN&#39;);
$params = array(&#39;value&#39;=>&#39;50&#39;);
for($i=0;$i<2000000;$i++){ 
$connect_mysql->insert($params);
if($i%100000==0){
$connect_mysql->query(&#39;COMMIT&#39;);
$connect_mysql->query(&#39;BEGIN&#39;);
}
}
$connect_mysql->query(&#39;COMMIT&#39;);
echo date("H:i:s");
로그인 후 복사

세 번째 방법 : 최적화된 SQL 문 사용: SQL 문을 연결하고, insert into table() 값 ​(), (), (), ()를 사용하고 한 번에 다시 삽입하십시오. 문자열이 너무 길면

그런 다음 MYSQL을 구성하고 실행해야 합니다. mysql 명령줄: set global max_allowed_packet = 2*1024*1024*10; 소비 시간은: 11:24:06 11:25:06;

200만 개의 레코드 삽입 테스트하는 데 1분 밖에 걸리지 않았습니다. 코드는 다음과 같습니다.

$sql= "insert into twenty_million (value) values";
for($i=0;$i<2000000;$i++){
$sql.="(&#39;50&#39;),";
};
$sql = substr($sql,0,strlen($sql)-1);
$connect_mysql->query($sql);
로그인 후 복사

마지막으로 요약하면 첫 번째 방법은 대량의 데이터를 삽입할 때 확실히 최악인 반면, 두 번째 방법은 실제 응용 프로그램에서 더 나쁩니다. 테스트 데이터나 기타 낮은 요구 사항을 삽입할 때 더 적합하며 정말 빠릅니다.

【관련 추천사항】

1. insert 문을 사용하여 여러 레코드를 일괄 삽입하는 튜토리얼 공유

2. mysql에서 사용되는 명령어 세 가지 삽입문 유형과 차이점

위 내용은 문에 삽입을 최적화하는 방법에 대한 팁 공유의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿