1

UPDATEゲームのために3〜5秒ごとに最大20のステートメントを別のMySQLサーバーに送信するサーバーがあります 。私の質問は、それらを一緒に連結する方が速いですか( UPDATE;UPDATE;UPDATE)。それらをトランザクションで実行してからトランザクションをコミットする方が速いですか? UPDATEそれぞれを個別に行う方が速いですか?

どんな洞察もいただければ幸いです!

4

2 に答える 2

1

これらの UPDATE を単一のトランザクション ブロックにラップする方が常に高速です。これの代償は、そのブロック内で何かが失敗した場合、何も起こらなかったということです。つまり、作業をもう一度やり直す必要があります。

また、MySQL のトランザクションは InnoDB エンジンを使用している場合にのみ機能することに注意してください。

于 2012-11-03T22:33:19.960 に答える
1

サーバーの接続方法に依存します。サーバー間の接続が永続的である場合、連結されたステートメントと複数の個別のステートメントの間に大きな違いは見られないでしょう。

ただし、実行に接続の確立、SQL ステートメントの実行、および接続の破棄が含まれる場合は、一度に複数のステートメントを実行することで、データベース サーバー上の多くのリソースを節約できます。接続を確立するプロセスは、コストと時間がかかる傾向があり、マシンが分離されているため、DNS 解決のオーバーヘッドが追加されます。

接続を確立し、トランザクションを開始し、ステートメントを個別に実行し、トランザクションをコミットし、データベース サーバーから切断することは、私にとって最も理にかなっています。すべてのUPDATEステートメントを 1 つの連結として送信するか、複数の個別のステートメントとして送信するかは、このシナリオではおそらく大きな違いにはなりません。特に、これがこれら 2 つのサーバー間の定期的な通信のみを含み、ユーザーの負荷に合わせてスケールアップすることを期待する必要がない場合は特にそうです。 、 例えば。

UPDATEトランザクションの使用は、ステートメントの 3 ~ 5 秒の周期的なバーストが何らかの形で論理的に関連していることを前提としています。それらが相互に依存していない場合は、トランザクションをスキップしてリソースを節約できます。

パフォーマンスに関するあらゆる質問と同様に、最善の答えは、現在のシステムがパフォーマンスとスケーリングのニーズを満たしている場合、まだマイクロ最適化にあまり注意を払うべきではないということです。

于 2012-11-03T22:20:27.043 に答える