heidiSQL エディターを使用して mySQL クエリを実行しています。クエリ時間が表示されるときに、ネットワーク時間も含まれることがあります。
1 回のクエリの所要時間: 1.194 秒。(+ 10.078 秒ネットワーク)
しかし、すべてが自分のコンピューター上にあるため、実際にはネットワークになることはできませんか?? その余分な時間は、別のセットアップで消えるものですか、それとも通常の方法でクエリのパフォーマンスを改善する必要がありますか (書き直し/やり直し)? 何が原因でパフォーマンスが低下しているのかさえわからない場合、クエリのパフォーマンスを改善することは困難です。
編集: プロファイリング情報
私はこのきちんとしたプロファイリング sql を使用しました: http://www.mysqlperformanceblog.com/2012/02/20/how-to-convert-show-profiles-into-a-real-profile/
クエリ 1:
my_table_with_100_thousand_rows から count(*) を選択します。
"1 回のクエリの所要時間: 0.390 秒" (これにはネットワーク時間は表示されませんでしたが、単純なカウントで約 0.4 秒 (*) はかなり長いようです。)
STATE Total_R Pct_R Calls R/Call
Sending data 0.392060 35.84 1 0.3920600000
freeing items 0.000214 0.02 1 0.0002140000
starting 0.000070 0.01 1 0.0000700000
Opening tables 0.000031 0.00 1 0.0000310000
statistics 0.000024 0.00 1 0.0000240000
init 0.000020 0.00 1 0.0000200000
(shorter times not included)
クエリ 2:
select * from 多くの行を持つ 4 つのテーブルを、primary_key-foreign_key またはインデックス付きの列で結合します。
「1 つのクエリの所要時間: 0.156 秒 (+ 10.140 秒のネットワーク)」(以下の時間の合計が合計よりも多くなりますか?)
STATE Total_R Pct_R Calls R/Call
Sending data 16.424433 NULL 1 16.4244330000
freeing items 0.000390 NULL 1 0.0003900000
starting 0.000116 NULL 1 0.0001160000
statistics 0.000054 NULL 1 0.0000540000
Opening tables 0.000050 NULL 1 0.0000500000
init 0.000046 NULL 1 0.0000460000
preparing 0.000033 NULL 1 0.0000330000
optimizing 0.000028 NULL 1 0.0000280000
(shorter times not included)
クエリ 3: クエリ 2 と同じですが、select * の代わりに count * を使用します。
「1 回のクエリの所要時間: 10.047 秒」
STATE Total_R Pct_R Calls R/Call
Sending data 10.050007 NULL 1 10.0500070000
(shorter times not included)
多くの行を表示する必要がある場合、「期間」にネットワーク時間が含まれているように思えますが、これは、行を表示する必要がない場合、この時間を差し引くことができるという意味ではありません。本当のクエリの時間です。これは正しいと思いますか?