>데이터 베이스 >MySQL 튜토리얼 >속도와 보안을 위해 MySQLi에 대한 대량 데이터 삽입을 어떻게 최적화할 수 있습니까?

속도와 보안을 위해 MySQLi에 대한 대량 데이터 삽입을 어떻게 최적화할 수 있습니까?

Susan Sarandon
Susan Sarandon원래의
2024-12-31 13:28:11775검색

How Can I Optimize Bulk Data Insertion into MySQLi for Speed and Security?

MySQLi의 대량 값 삽입을 위한 향상된 기술

MySQL 데이터베이스에 상당수의 값을 안전하게 삽입해야 하는 작업에 직면했을 때, 개발자는 종종 반복적으로 준비된 문을 사용하는데, 이는 대규모 데이터 세트의 경우 시간이 많이 걸릴 수 있습니다. 이 기사에서는 SQL 주입 보안을 손상시키지 않으면서 성능을 향상시키는 기술을 살펴봅니다.

문제: 스택 오버플로 및 느린 삽입

일반적인 접근 방식은 SQL 주입 보안 내부에서 준비된 문을 활용하는 것입니다. 루프를 통해 각 값을 개별적으로 삽입합니다. 그러나 이 방법은 데이터세트가 큰 경우 스택 오버플로 또는 실행 시간 저하로 이어질 수 있습니다.

$array = ["array", "with", "about", "2000", "values"];

foreach ($array as $one) {
    $query = "INSERT INTO table (link) VALUES (?)";
    $stmt = $mysqli->prepare($query);
    $stmt->bind_param("s", $one);
    $stmt->execute();
    $stmt->close();
}

해결책: 트랜잭션 및 최적화된 실행

위의 코드에서는 트랜잭션과 향상된 실행을 조합하여 사용할 수 있습니다. 전략:

$array = ["array", "with", "about", "2000", "values"];
$query = "INSERT INTO table (link) VALUES (?)";
$stmt = $mysqli->prepare($query);
$stmt->bind_param("s", $one);

$mysqli->query("START TRANSACTION");
foreach ($array as $one) {
    $stmt->execute();
}
$stmt->close();
$mysqli->query("COMMIT");

구현 세부 정보:

  • 트랜잭션: 값을 삽입하기 전에 트랜잭션을 시작하고 결국 커밋합니다. 값이 삽입됩니다. 이렇게 하면 삽입 중에 오류가 발생하면 변경 사항이 롤백됩니다.
  • 최적화된 실행: 준비된 문과 바인딩 작업을 루프 외부로 이동합니다. 이렇게 하면 값이 삽입될 때마다 명령문을 준비하는 오버헤드가 줄어듭니다.

성능 평가

10,000회 반복 테스트는 트랜잭션 사용 시 상당한 성능 향상을 보여줍니다. :

  • 거래 없음: ~226 초
  • 트랜잭션 포함: ~2초

이 최적화 기술은 2배의 속도 증가를 제공하므로 MySQL에서 대량 값 삽입을 위한 효율적이고 안전한 솔루션이 됩니다. MySQLi를 사용하는 데이터베이스.

위 내용은 속도와 보안을 위해 MySQLi에 대한 대량 데이터 삽입을 어떻게 최적화할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.