현재 위치: > 최신 기사 목록> pdostatement를 사용하여 데이터 삭제 성능을 최적화하는 방법 :: RowCount

pdostatement를 사용하여 데이터 삭제 성능을 최적화하는 방법 :: RowCount

gitbox 2025-05-20

일상 개발에서 데이터 삭제는 매우 일반적이지만 신중한 처리 작업이 필요합니다. 특히 대규모 데이터 처리 또는 실행 효율이 필요한 시나리오에서는 삭제 작업이 성공했는지 여부와 후속 논리를 계속 실행 해야하는지 정확하게 결정하는 것이 특히 중요합니다. 현재 pdostatement :: RowCount 함수가 그 역할을 수행 할 수 있습니다.

1. pdostatement :: RowCount 란 무엇입니까?

pdostatement :: RowCount 는 PDO가 PHP에서 SQL을 실행 한 후 메소드이며, 이전 SQL 문의 영향을받는 행의 수를 반환하는 데 사용됩니다. 삭제 , 업데이트 , 인서트 등과 같은 문의 경우 실제로 얼마나 많은 데이터 행의 데이터가 변경되거나 삭제되었는지 정확히 알 수 있습니다.

 $pdo = new PDO("mysql:host=localhost;dbname=testdb", "user", "password");
$stmt = $pdo->prepare("DELETE FROM users WHERE last_login < :threshold");
$stmt->execute([':threshold' => '2024-01-01']);
$deletedRows = $stmt->rowCount();
echo "총 삭제 $deletedRows 라인 레코드。";

이 예에서는 사용자 테이블의 기준을 충족하는 레코드가있는 경우 RowCount ()는 삭제 된 행 수를 반환 할 수 있습니다.

2. 삭제 작업의 성능 향상을위한 핵심 사항

1. 의미없는 삭제 작업을 피하십시오

여러 번, 우리는 프로그램 논리에서 삭제 명령문을 무조건 실행할 수 있지만 실제로는 데이터베이스의 조건을 충족시키는 레코드가 없을 수 있습니다. 이 무의미한 삭제 작업은 오류를보고하지 않지만 데이터베이스의 부담이 증가합니다.

rowCount ()를 사용하여 실행 전후 후에 후속 논리를 실행할지 여부를 정확하게 결정하십시오.

 $stmt = $pdo->prepare("DELETE FROM logs WHERE created_at < :expired_time");
$stmt->execute([':expired_time' => date('Y-m-d H:i:s', strtotime('-30 days'))]);

if ($stmt->rowCount() > 0) {
    // 레코드가 삭제되었습니다,후속 청소 작업을 수행 할 수 있습니다
    file_get_contents("https://gitbox.net/cleanup-notify");
}

레코드가 실제로 삭제되는지 여부를 결정함으로써 불필요한 원격 통화 또는 기타 리소스 소비를 피합니다.

2. 응답 속도를 향상시키기 위해 배치 삭제 전에 판단을 내립니다.

대규모 배치 삭제 작업을 처리 할 때는 먼저 Select Count (*) 점검을 사용하는 경우 두 개의 데이터베이스 액세스가 필요할 수 있습니다. RowCount ()는 즉시 실행 후 영향을받는 행 수를 즉시 제공하여 쿼리 오버 헤드를 저장할 수 있습니다.

 $stmt = $pdo->prepare("DELETE FROM temp_data WHERE expire_at < NOW()");
$stmt->execute();

if ($stmt->rowCount() === 0) {
    echo "삭제할 데이터가 없습니다。";
} else {
    echo "성공적으로 삭제되었습니다 {$stmt->rowCount()} 임시 데이터。";
}

이 방법은 불필요한 작업 반복을 피하기 위해 시간 정리 청소 스크립트에 작성하는 데 특히 적합합니다.

3. 로깅 및 성능 분석 지원

데이터베이스 작업을 수행 할 때는 영향을받는 행의 수를 기록하는 것이 문제 해결 및 성능 모니터링에 중요합니다. RowCount () 의 반환 값은 성능 병목 현상 또는 논리 오류를 찾는 데 도움이되는 세부 로그를 작성하는 데 사용될 수 있습니다.

 $logMessage = sprintf(
    "[%s] 청소 작업이 완료되었습니다,총 삭제 %d 만료 된 주문。",
    date('Y-m-d H:i:s'),
    $stmt->rowCount()
);
error_log($logMessage, 3, '/var/log/cleanup.log');

3. 사용을위한 예방 조치

RowCount ()는 대부분의 데이터베이스에서 잘 수행되지만 항상 SELECT 문에서 작동하지는 않습니다. 일부 데이터베이스 드라이버에서는 SELECT 문에서 ROWCOUNT ()을 호출하면 0을 반환하므로 삽입 , 삭제업데이트 와 같은 쓰기 작업에만 사용해야합니다.