현재 위치: > 최신 기사 목록> mysqli_result :: fetch_column을 사용하여 성능 문제를 피하는 방법

mysqli_result :: fetch_column을 사용하여 성능 문제를 피하는 방법

gitbox 2025-05-26

mysqli_result :: fetch_column은 무엇입니까?

Fetch_Column은 PHP 8.1의 MySQLI_Result 클래스에 추가 된 새로운 방법입니다. 결과 세트에서 단일 열의 값을 직접 얻고 추가 ​​배열 액세스를 피하는 데 사용됩니다. 간단한 구문이 있으며 PDO의 FetchColumn 과 유사합니다. 사용의 예는 다음과 같습니다.

<code> $ mysqli = new mysqli ( "gitbox.net", "user", "pass", "database"); $ result = $ mysqli-> query ( "사용자의 이름 선택");

while ($ name = $ result-> fetch_column ()) {
echo $ 이름. "\N";
}
</코드>

이 예에서 각 루프는 Fetch_Column을 통해 현재 행의 첫 번째 열 (기본값이 0 열) 데이터를 가져옵니다.


fetch_column 에 대한 빈번한 전화가 느리게 진행됩니까?

이론적으로 Fetch_Column은 기본 C 코드에서 읽을 수 있도록 한 행을 트리거하고 지정된 열의 값을 반환합니다. 단일 통화의 오버 헤드는 매우 작지만 루프에서 많은 데이터를 반복적으로 호출하면 누적 된 오버 헤드가 중요합니다.

주요 영향 요인은 다음과 같습니다.

  • 데이터 크기 : 데이터가 많을수록 통화가 많을수록 오버 헤드가 커집니다.

  • 네트워크 대기 시간 및 데이터베이스 성능 : 네트워크 요청 환경에서 데이터를 자주 가져 오면 지연이 중첩됩니다.

  • 클라이언트 처리 효율 : PHP의 루프 및 메소드 호출 자체도 오버 헤드가 있습니다.

극단적 인 예를 들기 위해, 수만 개의 레코드를 처리하려면 각각 Fetch_column을 별도로 호출하면 전체 응답 시간이 크게 증가합니다.


최적화하는 방법?

  1. 모든 데이터를 한 번에 가져옵니다

데이터 볼륨이 허용되면 한 번에 Fetch_all 또는 Fetch_all (MySQLI_NUM)을 사용한 다음 PHP를 통해 루프하는 것이 좋습니다. 이것은 여러 메소드 호출 및 네트워크 상호 작용의 오버 헤드를 줄입니다.

예:

<code> $ result = $ mysqli-> query ( "사용자의 이름 선택"); $ allnames = $ result-> fetch_all (mysqli_num);

foreach ($ allnames as $ row) {
echo $ 행 [0]. "\N";
}
</코드>

  1. 필요한 열만 가져옵니다

데이터 전송 및 처리량을 줄이려면 SQL 쿼리의 필수 필드 만 선택하십시오.

  1. 루프에서 반복 쿼리를 피하십시오

동일한 데이터를 여러 번 사용해야하는 경우 SQL을 여러 번 실행하지 않도록 결과를 먼저 캐시하는 것을 고려하십시오.

  1. 전처리 진술을 사용하십시오

전처리 진술은 더 안전하고 복잡한 쿼리에 대해 더 잘 수행합니다.


요약

루프에서 mysqli_result :: fetch_column을 자주 사용하는 것은 매우 느리지 않지만 데이터 볼륨이 크면 누적 호출로 가져온 오버 헤드는 무시할 수 없습니다. 메소드 호출 수를 줄이고 한 번에 데이터를 얻고 SQL을 합리적으로 설계하면 성능 및 응답 속도가 크게 향상 될 수 있습니다.

이 기사가 PHP에서 데이터베이스 데이터 추출을 더 잘 이해하고 최적화하는 데 도움이되기를 바랍니다.