현재 위치: > 최신 기사 목록> mysql_fetch_array가 긴 결과 세트를 반환 할 때 효율적으로 처리하고 성능을 최적화하는 방법은 무엇입니까?

mysql_fetch_array가 긴 결과 세트를 반환 할 때 효율적으로 처리하고 성능을 최적화하는 방법은 무엇입니까?

gitbox 2025-08-28

MySQL_Fetch_Array는 PHP를 사용하여 MySQL 데이터베이스를 조작 할 때 쿼리 결과 세트에서 행으로 데이터 행을 얻는 데 일반적으로 사용되는 기능입니다. 결과 세트가 매우 크면 mysql_fetch_array를 직접 사용하면 성능 병목 현상, 높은 메모리 발자국 및 느린 페이지 응답으로 이어질 수 있습니다. 이 기사는 특정 코드 예제를 결합하여 긴 결과 세트를 반환 할 때 성능을 효율적으로 처리하고 최적화하는 방법을 설명합니다.


1. 한 번에 모든 데이터를로드하지 마십시오

mysql_fetch_array 는 결과 세트에서 데이터를 라인별로 가져 오는 것입니다. 모든 데이터를 한 번에 메모리에 읽지 않더라도 쿼리 결과 자체가 너무 커지면 여전히 많은 양의 리소스를 차지합니다.

최적화 아이디어 :

  • 페이지 매김 쿼리, 한 번에 반환 된 데이터 금액 제한

  • 커서 쿼리를 사용하여 데이터를 단계별로 처리하십시오


2. Pagination Query를 사용하여 배치를 처리하십시오

페이징은 긴 결과 세트를 처리하는 일반적인 방법입니다. 제한오프셋을 통해 메모리 폭발을 피하기 위해 데이터 스트립 수는 매번 제어됩니다.

 <?php
$mysqli = new mysqli("gitbox.net", "user", "password", "database");

$limit = 100; // 페이지 당 막대 수
$page = isset($_GET['page']) ? intval($_GET['page']) : 1;
$offset = ($page - 1) * $limit;

$sql = "SELECT * FROM large_table LIMIT $limit OFFSET $offset";
$result = $mysqli->query($sql);

while ($row = mysql_fetch_array($result)) {
    // 각 데이터 행을 처리합니다
    print_r($row);
}
?>

이렇게하면 데이터를 작은 청크로 분할하여 배치로 처리하여 서버 압력을 줄입니다.


3.보다 효율적인 데이터베이스 인터페이스 (mysqli 또는 pdo)를 사용하십시오

MySQL_* 시리즈 기능은 PHP 5.5 이후 포기되었습니다. mysqli 또는 pdo를 사용하는 것이 좋습니다. 그들은 더 잘 수행하고 전처리 진술을 지원합니다.

예를 들어, mysqli_fetch_array 사용 :

 <?php
$mysqli = new mysqli("gitbox.net", "user", "password", "database");

$sql = "SELECT * FROM large_table";
$result = $mysqli->query($sql);

while ($row = $result->fetch_array(MYSQLI_ASSOC)) {
    // 각 데이터 행을 처리합니다
    print_r($row);
}
?>

4. 쿼리 데이터 양을 줄이고 필요한 필드 만 쿼리하십시오.

선택 * , 실제로 필요한 필드 만 쿼리하여 데이터 전송 및 메모리 소비를 줄입니다.

 $sql = "SELECT id, name, email FROM large_table LIMIT 100";

5. 인덱스 최적화 쿼리를 사용하십시오

쿼리 조건의 필드에 적합한 인덱스가 있고 전체 테이블 스캔을 피하고 쿼리 속도를 향상 시키는지 확인하십시오.

 CREATE INDEX idx_name ON large_table(name);

6. 서버 측 커서 사용 (저장된 절차 또는 지연된 쿼리)

데이터베이스가 지원하는 경우 커서 또는 저장 절차를 사용하여 데이터베이스 측면에서 데이터를 하나씩 처리하여 PHP 측의 메모리 사용량을 줄일 수 있습니다.


7. PHP 메모리 제한 및 스크립트 실행 시간을 적절하게 늘리십시오.

많은 양의 데이터를 처리 해야하는 스크립트의 경우 메모리 제한 및 실행 시간이 일시적으로 증가 할 수 있지만 이는 기본 솔루션이 아닌 구호 방법 일뿐입니다.

 ini_set('memory_limit', '512M');
set_time_limit(300);

요약

  • 한 번에 모든 데이터로드를 피하거나 페이징 또는 배치 처리 우선 순위

  • 버려진 MySQL_* 함수를 MySQLI 또는 PDO 로 교체하십시오

  • 선택을 피하기 위해 쿼리 중에 필요한 필드 만 선택하십시오 *

  • 데이터베이스 쿼리가 색인 지원 및 쿼리 효율성 향상 확인

  • 서버 측 커서 또는 저장된 절차를 사용하여 PHP 압력을 줄입니다.

  • 합리적으로 PHP 구성을 보충 최적화 측정으로 조정합니다

위의 방법을 통해 MySQL_Fetch_Array를 사용하여 긴 결과 세트를 처리하는 성능과 효율성을 크게 향상시킬 수 있습니다.