저는 일반적으로 PHP에서 많은 SQL 항목을 사용하지 않지만 최근에 친구가 디버그 할 수 있도록 강제되었습니다.PHP PDO MySQL 삽입 성능
일부 데이터를 삽입하기 위해 PHP로 PDO를 사용하고 있지만 삽입 성능은 매우 좋지 않습니다. 151 개의 인서트가 반복되는 간단한 루프가 거의 6 초 걸립니다! 그리고 왜 나는 길을 잃었습니다.
여기 내 코드입니다 : 나는 또한 bindParam를 사용하여 동일한 코드를 시도
<?php
$database='XXXXXX';
$username='XXXXXX';
$password='XXXXXX';
$hostname='127.0.0.1';
$inserted=0;
$counted=0;
$dsn = 'mysql:dbname='.$database.';host='.$hostname.'';
$start=microtime(true);
try {
$data = new PDO($dsn, $username, $password, array(PDO::ATTR_EMULATE_PREPARES => false));
} catch (PDOException $e) {
echo('Connection failed: ' . $e->getMessage());
}
for($i=1;$i<=150;$i++) {
$time=time();
$query=$data->prepare("INSERT INTO `tbl_temp` (aid, bid) VALUES (?, ?)");
$query->execute(array($i, $time));
}
$data=null;
print "Took: ".(microtime(true)-$start)." S to insert $i records\n";
// Took: 5.569482088089 S to insert 151 records <--- result
?>
과 속도가 거의 동일합니다. 서버에는 8 코어 Xeon 프로세서와 64GB RAM이 있습니다. 스크립트는 명령 줄 (php-cgi)에서 실행되며 데이터베이스와 테이블은 새롭고 비어 있습니다. 데이터베이스 타입은 InnoDB이다. 누가 왜 그렇게 느린지를 볼 올바른 방향으로 나를 가리킬 수 있습니까? 왜냐하면 MySQL은 결코 느리게 사용되지 않았기 때문입니다!
루프 밖에서 sql을 준비하면 약간 도움이됩니다. 나는 당신의 테이블 구조에서 문제가 더 많이 발생한다고 생각한다. 테이블 구조와 현재 내용은 무엇입니까? –
안녕하세요. 내 구조가이 ... 'code' ID입니다 -> AI 기본 키, 원조 -> INT, 입찰 -> Int 인 는 내 현재 내용은 : – user3169851
그냥 제안이에 대한 설명을 할 수있어 ZERO 행 입니다 위 쿼리에서 병목 현상이 어디에 있는지 관찰합니다. 도움이 될 수도 있고 그렇지 않을 수도 있습니다 ... –