現在、PHP で実行する MySQL クエリがあり、結果を確認するときに元のテーブルを更新しますが、500 行の単純なテーブルが完了するまでに 30 秒かかります。
$sqlquery = mysql_query('SELECT id, special_data FROM stats_visits WHERE processed = 0');
while($row = mysql_fetch_assoc($sqlquery)){
$stat_id = $row['id'];
// Make use of special_data field for some operations
mysql_query('UPDATE stats_visits SET processed = 1 WHERE id = ' . $stat_id);
}
選択しているテーブルを更新しているためですか?次のようにしてこれを解決しましたが、テーブルには将来何千ものレコードが含まれる可能性があるため、IN がどれだけうまく保持されるかはわかりません。
$statids = array();
$sqlquery = mysql_query('SELECT id, special_data FROM stats_visits WHERE processed = 0');
while($row = mysql_fetch_assoc($sqlquery)){
$statids[] = $row['id'];
// Make use of special_data field for some operations
}
mysql_query('UPDATE stats_visits SET processed = 1 WHERE id IN(' . implode(',', $statids) . ')');