현재 위치: > 최신 기사 목록> next_result ()가 쿼리 성능에 영향을 미칩니 까? 하나의 기사 분석

next_result ()가 쿼리 성능에 영향을 미칩니 까? 하나의 기사 분석

gitbox 2025-05-02

데이터베이스 작업에 PHP 및 MySQL을 사용할 때 많은 개발자가 문제가 발생했을 수 있습니다. 여러 SQL 문을 실행할 때 mysqli :: next_result ()가 필요 하며이 기능은 종종 "쿼리 속도 속도 속도 속도가 느려집니다"? 오늘 우리는 당신이 진실을 이해하는 데 도움이되는이 문제의 내부를 탐구 할 것입니다.

1. 다음 _result는 무엇입니까 ()

mysqli_multi_query ()를 사용하여 여러 SQL 문을 실행할 때 각 문의 결과를 수동으로 처리해야합니다. 현재 Next_result () 의 기능은 다음 SQL 문의 결과 세트로 내부 포인터를 이동하는 것입니다.

 $conn = new mysqli("localhost", "user", "password", "database");

$sql = "SELECT * FROM users; SELECT * FROM orders;";

if ($conn->multi_query($sql)) {
    do {
        if ($result = $conn->store_result()) {
            while ($row = $result->fetch_assoc()) {
                print_r($row);
            }
            $result->free();
        }
    } while ($conn->next_result());
}

2. next_result () 가 정말로 속도가 느려 집니까?

1. 에센스 분석

next_result () 는 본질적으로 쿼리를 실행하는 것이 아니라 MySQLI 클라이언트에게 "서버에서 다음 결과를 얻을 수 있다고"알립니다. 주 시간 소비는 다음과 같습니다.

  • 네트워크 대기 시간 (클라이언트 서버 통신)

  • 큰 데이터 볼륨 (결과 세트가 클 때 메모리가 소비됩니다)

  • 비 필수 처리 (처리되지 않은 결과를 청소해야합니다)

따라서 쿼리 자체가 이미 빠르면 Next_Result () 로의 호출은 거의 무시할 수 있습니다. 그러나 쿼리가 다량의 데이터를 생성하는 경우 결과 세트의 각 이동은 이전 결과를 구문 분석하고 해제해야하므로 실제로 추가 오버 헤드를 발생시킬 수 있습니다.

2. 성능 비교 실험

테스트에서 다음과 같은 다중 쿼리 문을 실행한다고 가정합니다.

 $sql = "
  SELECT * FROM big_table_1;
  SELECT * FROM big_table_2;
  SELECT * FROM big_table_3;
";

각 테이블의 데이터 볼륨은 약 50,000 행입니다.

두 세트의 테스트를 수행합니다.

  • A : multi_query () + next_result ()를 사용하여 각 결과를 정상적으로 구문 분석합니다.

  • B : multi_query ()를 사용하지만 첫 번째 결과 만 찍히고 나머지는 무시됩니다.

통계는 다음과 같습니다 (초) :

모델 실행 시간
에이 0.82S
0.48S

보시다시피, 후속 결과 세트가 필요하지 않으면 Next_result () 에게 전화하지 않으면 더 빠릅니다. 그러나이 데이터를 얻을 필요가있는 한 필수 불가결합니다.

3. 사용 및 최적화 제안을 정확하게하십시오

1. 필요하지 않은 경우 사용하지 마십시오

한 명령문의 쿼리 결과 만 필요하면 multi_query ()를 사용하지 마십시오.

 // 더 권장되는 방법
$result = $conn->query("SELECT * FROM users");

2. 결과 세트 크기를 줄입니다

multi_query ()를 사용할 때는 각 쿼리 문에서 반환 된 데이터 양을 가능한 한 많이 제어하십시오. 예를 들어, 필요한 필드 만 선택하거나 한도를 사용하여 숫자를 제한합니다.

 SELECT id, name FROM users LIMIT 100;

3. 자원을 풀어주는 데주의를 기울이십시오

특히 루프에 사용될 때 메모리 축적을 방지하려면 store_result ()$ result-> free () 에게 전화하십시오.

4. 결론

  • next_result () 자체는 "쿼리 속도를 늦추지 않고"프로세스의 일부일뿐입니다.

  • 속도에 실제로 영향을 미치는 것은 데이터의 양과 실제로 모든 결과가 필요한지 여부입니다.

  • 하나의 쿼리 만 있으면 Multi_Query ()를 피하십시오.

  • 여러 결과 처리가 필요한 경우 Next_result ()가 좋은 도우미입니다.

보다 심층적 인 성능 분석을 보려면 https://gitbox.net/articles/db-performance 의 자세한 비교 보고서를 방문하십시오.