일부 데이터베이스 시스템 (특히 MySQL)은 일반적으로 명시 적으로 요구되지 않는 한 선택 쿼리를 처리 할 때 결과 세트의 행 수를 계산하지 않습니다. 이 경우 RowCount ()을 호출하면 데이터베이스 엔진이 추가 작업을 수행하여 쿼리의 영향을받는 행 수를 반환합니다. 이 추가 계산으로 인해 쿼리가 느려집니다.
RowCount ()를 실행할 때 다른 데이터베이스 엔진마다 효율성이 다릅니다. PostgreSQL과 같은 일부 데이터베이스 엔진은 영향을받는 행의 수를 효율적으로 계산할 수 있으며 MySQL은 데이터, 특히 대규모 데이터 세트에서 추가 작업이 필요할 수 있습니다.
쿼리 된 데이터 양이 크면 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 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());
pdostatement :: rowCount () 는 매우 편리한 기능이지만 경우에 따라 쿼리 성능에 영향을 줄 수 있습니다. 불필요한 성능 오버 헤드를 피하려면 다음과 같은 방법으로 최적화를 수행 할 수 있습니다.
필요하지 않은 경우 RowCount ()를 사용하지 마십시오.
데이터 업데이트 작업의 경우 실행 결과를 통해 성공 여부를 직접 판단하십시오.
특히 페이지의 쿼리시 RowCount () 대신 Select Found_rows ()를 사용하십시오.
데이터베이스의 최적화 기능을 활용하십시오 (예 : MySQL의 설명 및 found_rows () ).
이러한 방법을 통해 pdostatement :: rowCount ()가 가져올 수있는 성능 문제를 피할 수있어 PHP 응용 프로그램이보다 효율적입니다.