mysql에서 레코드를 가져 오는 while 루프를 사용하고 있습니다. 우연히 올려 놓은 로그를 재설정하는 것이므로 DB의 백업에서 ID와 타임 스탬프를 가져 와서 해당 값으로 프로덕션 테이블을 업데이트하여 이전 레코드를 수정합니다.while 루프를 사용하는 PHP 메모리
이 로그 테이블에 12,545,628 개의 레코드가 있기 때문에 메모리 사용량을 제한하고이 솔루션의 사용량을 줄 이길 바랬습니다. ID와 타임 스탬프 필드 만 가져 오면 1GB의 메모리를 통해 빠져 나갑니다.
메모리 사용량을 한 번에 하나의 레코드로 제한합니까, 아니면 모든 ID 및 타임 스탬프를 똑바로 뽑아 내고이를 사용하고 있습니까?
$sql = 'SELECT id, timestamp FROM log_people WHERE 1';
$Test->sqlQuery($sql);
while ($testdb = $Test->sth->fetch(PDO::FETCH_ASSOC)) {
$Prod->beginTransaction();
try {
$sql2 = 'UPDATE log_people SET timestamp = "'.$testdb['timestamp'].'" WHERE id = '.$testdb['id'];
$Prod->sqlQuery($sql2);
} catch (exception $err) {
$Prod->rollback();
echo $err->getMessage();
}
}
난 그냥 당겨 한 번에 하나 개의 레코드를 수정하기 위해 아래의 코드를 일을해야 (내가 설정 데이터베이스 클래스 PDO를 이상하게 보일 수 있도록했습니다)? 문제에
while ($count < 12545628){
$sql = 'SELECT id, timestamp FROM log_people WHERE id ='.$count;
$Test->sqlQuery($sql);
$testdb = $Test->sth->fetch(PDO::FETCH_ASSOC)
$Prod->beginTransaction();
try {
$sql2 = 'UPDATE log_people SET timestamp = "'.$testdb['timestamp'].'" WHERE id = '.$testdb['id'];
$Prod->sqlQuery($sql2);
$count++;
} catch (exception $err) {
$Prod->rollback();
//return $err->getMessage();
echo $err->getMessage();
}
}
그럼 왜 모든 레코드를 '선택'해야합니까? 모든 기록을 업데이트해야하는 이유는 무엇입니까? –
백업 테이블의 복사본을 동일한 DB에두고 SQL을 사용하여 프로덕션 테이블을 업데이트하면이 작업을 훨씬 빠르고 쉽게 수행 할 수 있습니까? PHP에서 왜 그렇게합니까? –