현재 위치: > 최신 기사 목록> pdostatement를 사용하여 발생하는 쿼리 성능 저하를 피하는 방법 :: RowCount

pdostatement를 사용하여 발생하는 쿼리 성능 저하를 피하는 방법 :: RowCount

gitbox 2025-05-28
에이. 데이터베이스는 행 계산을 직접 지원하지 않습니다

일부 데이터베이스 시스템 (특히 MySQL)은 일반적으로 명시 적으로 요구되지 않는 한 선택 쿼리를 처리 할 때 결과 세트의 행 수를 계산하지 않습니다. 이 경우 RowCount ()을 호출하면 데이터베이스 엔진이 추가 작업을 수행하여 쿼리의 영향을받는 행 수를 반환합니다. 이 추가 계산으로 인해 쿼리가 느려집니다.

비. 행 계산은 데이터베이스 엔진의 최적화에 따라 다릅니다

RowCount ()를 실행할 때 다른 데이터베이스 엔진마다 효율성이 다릅니다. PostgreSQL과 같은 일부 데이터베이스 엔진은 영향을받는 행의 수를 효율적으로 계산할 수 있으며 MySQL은 데이터, 특히 대규모 데이터 세트에서 추가 작업이 필요할 수 있습니다.

기음. 대형 데이터 세트 쿼리의 성능에 영향을 미칩니다

쿼리 된 데이터 양이 크면 RowCount () 는 데이터베이스 엔진이 전체 데이터 세트를 반복하거나 추가 계산 쿼리를 수행해야합니다. 이는 특히 특별한 최적화없이 쿼리의 성능을 크게 줄일 수 있습니다. 데이터베이스가 매우 큰 데이터 세트에서 작업하는 경우 추가 행 계산 작업이 병목 현상이 될 수 있습니다.

2. 쿼리 성능에 영향을 미치는 RowCount ()를 피하는 방법은 무엇입니까?

에이. 불필요한 RowCount () 호출을 피하십시오

영향을받는 행의 수가 아닌 쿼리의 결과 세트에만 관심이있는 경우 가장 쉬운 솔루션은 RowCount ()를 사용하지 않는 것입니다. 예를 들어, 선택 쿼리를 실행할 때 행 수가 아닌 데이터가 반환되는지 여부를 알아야하는 경우 결과를 처리하기 위해 Fetch () 또는 FetchAll ()을 사용하는 것이 가장 좋습니다.

 // 사용되지 않습니다 rowCount 행 카운트 확인을 수행하십시오
$stmt = $pdo->query("SELECT * FROM users");
if ($stmt->fetch()) {
    echo "데이터가 있습니다";
} else {
    echo "没데이터가 있습니다";
}
비. 삽입 , 업데이트 , 삭제 의 경우 실행 결과를 직접 볼 수 있습니다.

삽입 , 업데이트삭제 작업의 경우 RowCount () 를 사용하는 것이 유용 할 수 있지만 성능 오버 헤드에주의하십시오. 데이터가 성공적으로 수정되었는지 여부에 대해서만 관심이있는 경우 RowCount () 에 의존하는 대신 직접 실행 결과를 보는 것을 고려할 수 있습니다.

 // 사용 rowCount 영향을받는 행의 수를 얻으십시오
$stmt = $pdo->prepare("UPDATE users SET name = :name WHERE id = :id");
$stmt->execute([':name' => '새로운 이름', ':id' => 1]);

// 의존하지 않습니다 rowCount 직접적인 판단
if ($stmt->rowCount() > 0) {
    echo "데이터 업데이트가 성공적으로 업데이트됩니다";
} else {
    echo "데이터가 업데이트되지 않았습니다";
}
기음. select found_rows () 사용

쿼리의 행 수를 실제로 알아야하는 경우, 특히 제한 또는 오프셋 쿼리를 실행할 때 Select Find_rows ()를 사용하여보다 효율적인 선택입니다. MySQL에서 found_rows ()는 데이터를 다시 계산하지 않고 이전 선택 쿼리의 결과 집합의 행 수를 반환합니다.

 // 사용 FOUND_ROWS() 쿼리 결과 세트에서 행 수를 얻으십시오.
$stmt = $pdo->query("SELECT SQL_CALC_FOUND_ROWS * FROM users LIMIT 10");
$stmt->fetchAll();

$rows = $pdo->query("SELECT FOUND_ROWS()")->fetchColumn();
echo "발견 된 행의 수: $rows";
디. 데이터베이스의 최적화 특성을 활용하십시오

경우에 따라 데이터베이스 엔진은 MySQL의 설명 명령문 과 같은 최적화 기능을 제공하여 쿼리의 실행 계획을 분석하는 데 도움이됩니다. 쿼리 성능이 rowCount () 의 영향을받는 경우 쿼리 자체 최적화 또는 대형 데이터 세트에서 불필요한 행 계산을 피하는 것을 고려해야 할 수도 있습니다.

 // 사용 EXPLAIN 쿼리의 실행 계획을보십시오
$stmt = $pdo->query("EXPLAIN SELECT * FROM users WHERE name LIKE '%test%'");
var_dump($stmt->fetchAll());

3. 요약

pdostatement :: rowCount () 는 매우 편리한 기능이지만 경우에 따라 쿼리 성능에 영향을 줄 수 있습니다. 불필요한 성능 오버 헤드를 피하려면 다음과 같은 방법으로 최적화를 수행 할 수 있습니다.

  • 필요하지 않은 경우 RowCount ()를 사용하지 마십시오.

  • 데이터 업데이트 작업의 경우 실행 결과를 통해 성공 여부를 직접 판단하십시오.

  • 특히 페이지의 쿼리시 RowCount () 대신 Select Found_rows ()를 사용하십시오.

  • 데이터베이스의 최적화 기능을 활용하십시오 (예 : MySQL의 설명found_rows () ).

이러한 방법을 통해 pdostatement :: rowCount ()가 가져올 수있는 성능 문제를 피할 수있어 PHP 응용 프로그램이보다 효율적입니다.