>  기사  >  백엔드 개발  >  PHP에서 대량의 데이터를 쿼리할 때 메모리 소모 문제에 대한 해결 방법

PHP에서 대량의 데이터를 쿼리할 때 메모리 소모 문제에 대한 해결 방법

墨辰丷
墨辰丷원래의
2018-05-31 09:59:401408검색

이 글은 주로 PHP에서 대용량 데이터를 쿼리할 때 발생하는 메모리 소모 문제에 대한 해결 방법을 자세히 소개하고 있습니다. 관심 있는 친구들이 참고하면 좋을 것 같습니다. Tip

:

PHP 치명적인 오류: 허용되는 메모리 크기는 268 435 456바이트입니다.

공식 PHP 웹사이트에서는 이 문제를 버퍼링된 쿼리와 버퍼링되지 않은 쿼리라고 합니다. PHP의 기본 쿼리 모드는 버퍼링 모드입니다. 즉, 쿼리 데이터 결과는 PHP 프로그램에서 처리하기 위해 한꺼번에 메모리로 추출됩니다. 이는 PHP 프로그램에 행 수 계산, 특정 행에 대한 포인터 지정 등과 같은 추가 기능을 제공합니다. 더 중요한 것은 프로그램이 데이터 세트에 대해 2차 쿼리와 필터링 작업을 반복적으로 수행할 수 있다는 것입니다. 그러나 이 버퍼링된 쿼리 모드의 단점은 메모리를 소비한다는 것, 즉 속도를 위해 공간을 교환한다는 것입니다.

반면에 또 다른 PHP 쿼리 모드는 버퍼링되지 않은 쿼리입니다. 데이터베이스 서버는 데이터를 한 번에 모두 반환하지 않고 하나씩 반환합니다. 결과적으로 PHP 프로그램은 메모리를 덜 소비하지만 데이터베이스에 대한 부담을 증가시킵니다. server. 데이터베이스는 모든 데이터를 가져올 때까지 PHP가 데이터를 가져올 때까지 기다리기 때문입니다.

분명히 버퍼링된 쿼리 모드는 작은 데이터 볼륨 쿼리에 적합하고, 버퍼링되지 않은 쿼리 모드는 큰 데이터 볼륨 쿼리에 적합합니다.

PHP의 버퍼 모드 쿼리에 대해서는 누구나 알고 있습니다. 아래 예제는 버퍼되지 않은 쿼리 API를 실행하는 방법입니다.

버퍼되지 않은 쿼리 방법 1:

mysqli

<?php 
$mysqli = new mysqli("localhost", "my_user", "my_password", "world"); 
$uresult = $mysqli->query("SELECT Name FROM City", MYSQLI_USE_RESULT); 
if ($uresult) { 
  while ($row = $uresult->fetch_assoc()) { 
    echo $row[&#39;Name&#39;] . PHP_EOL; 
  } 
} 
$uresult->close(); 
?>


버퍼되지 않은 쿼리 방법 2:

pdo_mysql

<?php 
$pdo = new PDO("mysql:host=localhost;dbname=world", &#39;my_user&#39;, &#39;my_pass&#39;); 
$pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false); 
$uresult = $pdo->query("SELECT Name FROM City"); 
if ($uresult) { 
  while ($row = $uresult->fetch(PDO::FETCH_ASSOC)) { 
    echo $row[&#39;Name&#39;] . PHP_EOL; 
  } 
} 
?>


non Buffer 쿼리 방법 3:

mysql

<?php 
$conn = mysql_connect("localhost", "my_user", "my_pass"); 
$db  = mysql_select_db("world"); 
$uresult = mysql_unbuffered_query("SELECT Name FROM City"); 
if ($uresult) { 
  while ($row = mysql_fetch_assoc($uresult)) { 
    echo $row[&#39;Name&#39;] . PHP_EOL; 
  } 
} 
?>


위 내용은 이 글의 전체 내용이므로, 모든 분들의 학습에 도움이 되기를 바랍니다.


관련 권장사항:

PHP에서 16진수 색상 랜덤 생성 기능을 구현하는 방법


PHP에서 웹사이트 다운 여부를 확인하는 방법 설명


로그인 페이지 정보 구현 PHP 프롬프트 기능(예제 분석)



위 내용은 PHP에서 대량의 데이터를 쿼리할 때 메모리 소모 문제에 대한 해결 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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