현재 위치: > 최신 기사 목록> mysqli_result :: fetch_column은 단일 열 데이터를 추출 할 때 메모리 최적화에 사용됩니다.

mysqli_result :: fetch_column은 단일 열 데이터를 추출 할 때 메모리 최적화에 사용됩니다.

gitbox 2025-05-29

데이터베이스 쿼리를 처리 할 때 PHP가 발생하면 결과 세트의 열에만 관심이 있으면 mysqli_result :: fetch_column ()을 사용하여 매우 효율적인 방법입니다. 이 접근법은 기존의 fetch_assoc () 또는 fetch_row () 보다 메모리 절약이 더 많으며 특히 많은 양의 데이터를 처리 할 때 더 잘 수행됩니다. 이 기사는 PHP 프로그램의 전반적인 성능을 향상시키기 위해 Fetch_column ()을 사용하는 동안 메모리 사용량을 추가로 최적화하는 방법을 살펴 봅니다.

1. 쿼리 결과의 열 수 제한

메모리를 최적화하는 가장 직접적이고 효율적인 방법 중 하나는 select *를 사용하는 대신 SQL 쿼리에서 실제로 필요한 열만 선택하는 것입니다. 예를 들어:

 $result = $mysqli->query("SELECT username FROM users");

이렇게하면 데이터베이스 서버가 PHP로 전송 한 데이터 양을 줄이고 소스에서 메모리 소비를 줄일 수 있습니다.

2. fetch_assoc () 또는 fetch_row () 대신 fetch_column ()을 사용하십시오.

fetch_assoc ()는 연관 배열을 반환하고, fetch_row ()는 인덱스 배열을 반환하고 fetch_column ()은 단일 값을 직접 반환합니다.

 while ($username = $result->fetch_column()) {
    // 거래하십시오$username
}

이 방법은 불필요한 배열 캡슐화를 피하고 메모리 할당을 줄입니다. 특히 특정 데이터 열만 필요한 시나리오에 대해.

3. 모든 데이터를 배열로 캐시하지 마십시오

일반적인 관행은 먼저 모든 결과를 배열로 캐시 한 다음 처리하는 것입니다.

 $usernames = [];
while ($username = $result->fetch_column()) {
    $usernames[] = $username;
}

데이터 볼륨이 크면 많은 양의 메모리 사용이 발생할 수 있습니다. 처리 로직이 허용되면 모든 데이터를 한 번에로드하지 않고 읽는 동안 읽고 처리하십시오.

 while ($username = $result->fetch_column()) {
    process_username($username); // 假设是某个거래하십시오函数
}

4. 합리적인 MySQLI 버퍼링 전략을 설정하십시오

기본적으로 mysqli_query ()는 클라이언트 메모리에서 모든 결과를 캐시합니다. 데이터 볼륨이 특히 큰 경우 MySQLI_USE_RESULT 상수를 사용하여 부러지는 쿼리를 활성화 할 수 있습니다.

 $result = $mysqli->query("SELECT username FROM users", MYSQLI_USE_RESULT);

이 방법은 모든 결과를 메모리에로드하지는 않지만 한 번에 서버에서 한 줄의 데이터를 얻어 더 많은 메모리를 저장합니다. 그러나 부패하지 않은 결과 세트는 처리 전에 다른 쿼리를 실행할 수 없습니다.

5. PHP 메모리 제한을 합리적으로 구성합니다

PHP 스크립트 자체가 고로드 작업 (예 : 다량의 데이터 추출)을 수행하는 경우, 메모리 오버플로를 방지하고 너무 높고 폐기물 시스템 자원을 설정하지 않도록 php.inimemory_limit이 합리적으로 설정되어 있는지 확인하십시오. 다음 방법으로 동적으로 설정할 수 있습니다.

 ini_set('memory_limit', '128M');

그러나 단순히 메모리 캡을 늘리는 대신 프로그램 로직을 최적화하는 것이 좋습니다.

6. 생성기를 사용하여 메모리 사용량을 더욱 줄입니다

여러 열 값을 반환 해야하는 함수의 경우 발전기가 지연된 하중의 효과와 결합 될 수 있습니다.

 function get_usernames(mysqli_result $result): Generator {
    while ($username = $result->fetch_column()) {
        yield $username;
    }
}

// 사용
foreach (get_usernames($result) as $username) {
    process_username($username);
}

생성기의 장점은 모든 데이터를 한 번에 메모리에로드하지 않으므로 큰 결과 세트를 처리하는 데 특히 적합하다는 것입니다.

요약

mysqli_result :: fetch_column () 자체를 사용하는 것은 메모리 최적화 관행이지만, 필요한 필드 만 쿼리하고, 처리하는 동안 데이터 추출, 부러지는 쿼리 및 생성기를 사용하는 것과 같은 다른 기술과 결합하여 PHP 프로그램의 메모리 소비를 줄이고 성능을 향상시킬 수 있습니다. 이러한 최적화 방법은 데이터 볼륨이 큰 처리에 특히 중요합니다.

데이터베이스와 상호 작용하는 고성능 PHP에 대한보다 실용적인 경험은 https://gitbox.net/php-db-optimization 에서 찾을 수 있습니다.