성능 최적화는 종종 데이터베이스 운영의 큰 데이터 볼륨을 다룰 때 개발자가 직면 해야하는 문제입니다. PHP가 제공하는 PDO (PHP Data Objects) 확장자는 데이터베이스 작업에 통합 인터페이스를 제공 할뿐만 아니라 성능 최적화 잠재력도 제공합니다. 그중에서도 pdostatement :: rowCount () 함수는 매우 간과되지만 매우 유용한 도구입니다. 이 기사는 RowCount ()를 사용하여 대규모 데이터 볼륨의 데이터베이스 작업을 최적화하는 방법을 살펴 봅니다.
pdostatement :: rowCount ()는 마지막 SQL 문에 영향을받는 행의 수를 반환하는 pdostatem 클래스의 메소드입니다. 이 방법은 종종 다음 작업에서 사용됩니다.
레코드가 업데이트, 삭제 또는 삽입되었는지 여부를 결정합니다.
페이징 로직을 제어하십시오.
유효하지 않은 루프 처리 중단;
통계 분석의 일부로 중복 쿼리를 피하십시오.
rowCount () 는 다양한 유형의 데이터베이스 (예 : MySQL, PostgreSQL)에서 선택 쿼리를 지원하며 일반적으로 삽입 , 업데이트 및 삭제 에 권장됩니다.
큰 데이터 볼륨을 처리 할 때 성능 병목 현상은 종종 다음 측면에서 발생합니다.
결과 세트를 불필요하게 통과하십시오.
다수의 잘못된 업데이트 또는 삭제가 수행되었습니다.
데이터를 쿼리 한 다음 데이터베이스 작업을 직접 사용하여 판단하기보다는 데이터가 존재하는지 확인하십시오.
다중 쿼리는 영향을받는 행의 수를 확인하여 불필요한 데이터베이스로드가 증가합니다.
RowCount () 합리적으로 사용하면 위의 문제를 효과적으로 피할 수 있습니다.
$pdo = new PDO('mysql:host=localhost;dbname=test', 'user', 'pass');
$stmt = $pdo->prepare("DELETE FROM users WHERE last_login < :expired_date");
$stmt->execute([':expired_date' => '2023-01-01']);
$rowsDeleted = $stmt->rowCount();
if ($rowsDeleted > 0) {
echo "$rowsDeleted 레코드가 삭제되었습니다。";
} else {
echo "만료 된 사용자는 삭제되지 않았습니다。";
}
최적화 지점 : RowCount ()는 불필요한 로깅, 캐시 청소 및 기타 작업을 피하며 레코드가 실제로 삭제 될 때 후속 로직 만 실행됩니다.
$stmt = $pdo->prepare("UPDATE orders SET status = 'completed' WHERE shipped = 1 AND status = 'processing'");
$stmt->execute();
if ($stmt->rowCount() > 0) {
// 변경이있을 때만 로그 또는 트리거 알림을 작성합니다.
file_get_contents("https://gitbox.net/api/log_update?count=" . $stmt->rowCount());
}
최적화 포인트 : 통화를 로그 인터페이스에 저장하고 외부 요청의 부담을 줄입니다.
$pageSize = 1000;
$page = 1;
do {
$offset = ($page - 1) * $pageSize;
$stmt = $pdo->prepare("SELECT id, name FROM products LIMIT :offset, :limit");
$stmt->bindValue(':offset', $offset, PDO::PARAM_INT);
$stmt->bindValue(':limit', $pageSize, PDO::PARAM_INT);
$stmt->execute();
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach ($results as $row) {
// 각 레코드를 처리하십시오
}
$page++;
} while ($stmt->rowCount() > 0);
최적화 지점 : RowCount ()를 사용하여 처리 할 데이터가 더 많은지 여부를 결정하고 반복 쿼리 또는 빈 데이터 처리를 피하십시오.
일부 데이터베이스 드라이버 (예 : MySQL)에서 Select Queries에 rowCount ()를 사용하면 정확한 결과가 반환되지 않을 수 있습니다.
성능을 보장하려면 한계 와 조항 을 사용하여 가능한 한 정확하게 데이터를 찾으십시오.
여러 데이터베이스와 호환되는 경우 RowCount () 의 사용 제한을 문서에 표시하거나 응용 프로그램 패키지를 수행해야합니다.
pdostatement :: rowCount ()는 "무거운"최적화 도구가 아니지만, 많은 데이터 볼륨의 경우 합리적 사용을 사용하면 불필요한 오버 헤드를 건너 뛰고 외부 종속성 호출을 줄이며 논리적 판단을 단순화하는 데 도움이 될 수 있습니다. 고성능, 유지 관리 및 자원 보존을 추구하는 시스템의 경우 이러한 "세부 최적화"가 종종 성공의 열쇠입니다.
빅 데이터를 처리 할 때 RowCount ()를 사용 했습니까? 어쩌면 지금은 힘을 시도 할 수있는 좋은 기회 일 것입니다.