コードをループするたびに複数の更新が発生します。質問を書く時に、私は80の別々の更新が1つのテーブルから起こっています。MySQLの複数の更新が長すぎます
これは10.8秒かかります。アップデートをしないと(画面に出力されるので、プログラムが何をしているかを見ることができます)、2.7秒かかります。 8秒が長すぎるためにデータベースをロックしている:(
更新の例です
UPDATE players SET energy=energy+14 WHERE playerID=243 LIMIT 1
UPDATE players SET energy=energy+7 WHERE playerID=258 LIMIT 1
UPDATE players SET energy=energy+3986 WHERE playerID=244 LIMIT 1
UPDATE players SET energy=energy+2990 WHERE playerID=245 LIMIT 1
?
これはデータベースに必要ですか?おそらく** memcachedレイヤー**の間に、このような素早く変化するプレーヤーデータを保存したいと思うかもしれません。その後、memcachedの値を定期的に保存することができます(例えば、プレーヤーがログオフしたり、大規模なイベントが発生した場合) – Konerak
データベースが必要な場合: 'SHOW FULL PROCESSLIST'の出力全体を表示できますか?選択/挿入ではなく、ブロックしている更新ですか? 'SHOW CREATE TABLE players'の出力を表示して、データ型とインデックスをチェックできますか? – Konerak
また、1つのデータベース接続ですべての更新を実行していることを確認してください。 –