2009-05-08 10 views
2

単一のテーブルから非常に単純なクエリ(3つの条件は2つあり、そのうち1つは1つです)があります.MySQLクエリブラウザでは、実行には0.5秒もかかりません。 MySQLデータコネクタ(実際にはOLEDBラッパー)を使用して同じクエリを実行すると、約35秒かかります。MySQLデータコネクタがMySQL Query Browserよりもずっと時間がかかるのはなぜですか?

使用されているエンジンはMyISAMです(重要な場合)。私はVisual Studio 2008を使用しています(それは重要です)。編集:MySQLデータコネクタ5.2.5を使用します。編集、編集:MySQLデータコネクタ6.0.3(最新)に切り替えると、29秒に短縮されました。

クエリは次のとおりです。

select drh_data.reading_time, drh_data.raw_value, drh_data.float_value, drh_data.data_quality 
from drh_data 
where drh_data.site_id=202 
and drh_data.device_id=7 
and reading_time between '2009-04-08 11:15:01' and '2009-05-08 11:15:02' 
order by drh_data.reading_time desc; 

任意のアイデア?

アップデート:最終的に(回答者の示唆したように)CPU使用率をチェックしたところ、アプリケーションで50%のCPU時間が使用されていました。 (CentOSの)MySQLを実行しているVirtualPCボックスは、20秒間に0%だったので、問題はすべてクライアント側にあります。私はまたクエリーについてExplainを実行しました。これは次のものに戻ってきました:

id select_type table type possible_keys        key        key_len  ref  rows Extra 
1 SIMPLE drh_data range PRIMARY,idx_site_device_reading_receive  idx_site_device_reading_receive 11     7674 Using where 

私はここでタップしました。誰もがこれを解決するためのアイデアを持っていますか?私はLIMIT経由で選択肢を分割するつもりですが、私はそれを行う必要があるとは思わない。

+0

ああ、素敵。これは、MySQLクエリの問題ではなく、DataGridViewの問題であることが判明しました。私はAutoSizeRowsMo​​deをAllCellに設定していたので、DataGridViewは各セルの行のサイズを毎回変更する必要があったため、ロードに時間がかかりました。これは4秒に短縮されました。これははるかに合理的です。 –

答えて

1

私はこれらの秒(CPU使用率)の仕事をしているか、mysqlなのか、それともあなたのコードなのかを調べることをお勧めします。 EXPLAINを使用して、いずれかのケースで何が起こっているのかを見て比較することもできます。

+0

最後にテストすることができます:CPU使用率はアプリケーション全体で50%です(実際には同じボックスのVirtualPCでMySQLを実行しているので、それも問題なく動作しているかどうかを確認できます。 't、まったく)。説明すると、それは単純なselect_typeであり、使用しているキーであり、Extra列には「Where using」が表示されています。しかし、今見たいものは何か分からない。 –

+0

これは尋ねられたように質問に正確に答えるものではありませんが、正しい方向に私を導きました。 –

1

ADO.NETとSQL Serverクエリアナライザを使用する前に、この問題が発生しました。クエリアナライザからクエリを実行すると、クエリは2秒後に実行されました。私たちがWebアプリケーションから実行したときには、2分以上かかることになりました。何らかの理由でインデックスをテーブルに適用すると、アプリケーションとデータベースの間のデータ接続が高速化されているようです。

私は、MySQlとSQL Serverの間の操作上の違いはわかりませんが、私たちの場合に起こっているようなことは、実行キャッシュがいっぱいになり、すべてのキャッシュされていない実行計画の実行が遅くなっていたことです。キャッシュをクリアする週単位のジョブを実装しました。

+0

私は仕事に戻るときにそれを確認します。おそらく、実行キャッシュ(SQL_NO_CACHEのようなもの)をヒットしないように指示する方法がありますか? –

+0

SQL_NO_CACHEを実行すると、約14秒に短縮されましたが、これは優れていますが、それでも優れていません。 –

関連する問題