저는 지금까지 이름, ID, 점수 및 순위가 포함 된 7000 개 이상의 리더 보드 데이터가있는 프로젝트를 진행하고 있습니다. 계속 확장되고 있으며, 누군가가 새로운 점수를 올릴 때마다 모든 것을 업데이트하려고 시도한 후에 서버가 시간 초과되는 걸림돌을 때리고 있습니다.mySQL을 사용하여 1000 개의 행을 업데이트하는 가장 효율적인 방법은 무엇입니까?
현재 루프 된 execute() 호출과 결합 된 쿼리와 함께 PDO를 사용하고 있습니다. 이 방법을 사용하는 것이 훨씬 빠릅니다 (아마도 단일 MySQL 쿼리에서)? 또는 리더 보드 업데이트를 처리하는 방법에 대한 제안 사항이 있습니까? 이하지로 밝혀 그래서 만약
$stmt = $dbh->prepare("SELECT * FROM high_scores ORDER BY score DESC");
$stmt->execute();
$stmt->setFetchMode(PDO::FETCH_ASSOC);
$results = $stmt->fetchAll();
//
$numItems = count($results);
// is this OK or a no-no?
try {
$stmt = $dbh->prepare("UPDATE high_scores SET rank = :rank WHERE uid = :uid");
for($i=0; $i<$numItems; $i++){
$rank = $i + 1;
$uid = $results[$i]['uid'];
$stmt->execute(array(':rank' => $rank, ':uid' => $uid));
}
return true;
} catch (PDOException $e) {
echo($e->getMessage());
}
이것은 큰 도움이되었습니다. 감사합니다. – maskedbacon