1

「実行計画」の記事から何かを見ました:

10 rows fetched in 0.0003s (0.7344s)

(リンク:http ://explainextended.com/2009/09/18/not-in-vs-not-exists-vs-left-join-is-null-mysql/ )

なぜ2つの期間が表示されるのですか?まだ大きなデータセットがない場合はどうなりますか。たとえば、レコードが20、50、または100しかない場合、実際の状況で2つの異なるSQLステートメントの速度を比較して実際に測定することはできません。言い換えると、これら2つの異なるSQLステートメントのパフォーマンスを正確に比較するには、少なくとも数十万のレコード、さらには数百万のレコードが必要ですか?

4

3 に答える 3

1

あなたの最初の質問のために:

Y s(Z s)でフェッチされたX行

X =行数(もちろん); Y = MySQLサーバーがクエリ(解析、取得、送信)を実行するのにかかった時間。Z=サーバーからクライアントへの転送に結果セットが費やした時間。

(出典: http: //forums.mysql.com/read.php?108,51989,210628#msg-210628

2番目の質問では、現実的な数のレコードでテストしない限り、クエリがどのように実行されるかを知ることはできません。正しくベンチマークする方法の良い例を次に示します。http ://www.mysqlperformanceblog.com/2010/04/21/mysql-5-5-4-in-tpcc-like-workload/

そのブログ一般と本「HighPerformanceMySQL」は金鉱です。

于 2010-04-24T16:18:34.943 に答える
1

操作のパフォーマンスをテストおよび比較するための最良の方法は、多くの場合(常にではないにしても!)、現実的なデータセットを操作することです。

アプリケーションの運用中に数百万行を計画している場合は、今すぐ数百万行でテストする必要があります。数十行だけではありません。


いくつかのヒント:

  • ベンチマーク中はselect SQL_NO_CACHE ...、代わりにを使用してくださいselect ...
    • これにより、MySQLがクエリキャッシュを使用できなくなります(これにより、最初のクエリに通常の時間がかかり、数倍速く再実行されます)
  • 使用方法を学びEXPLAIN、その出力を理解する
  • マニュアルの第7章最適化のセクションを読んでください;-)
于 2010-04-24T16:09:38.243 に答える
0

通常、2回表示される場合、1つはCPU時間、もう1つは実時間です。どちらがどちらかは思い出せませんが、1つ目はCPU時間、2つ目は経過時間のようです。

于 2010-04-24T16:09:20.420 に答える