2011-06-21 11 views
1

いくつかの物理センサーを監視するsqliteデータベースを設定しています。別のアプリケーションが数ヶ月間データを保存しています...このアプリケーションは、そのデータ収集を監視するだけです。私は自分のクエリができるだけ効率的であることを確認したい。どちらが速いですか? ORDER BY TimestampまたはWHERE Timestamp =

センサから最後のいくつかの読みを取りたいと思います。約20種類のセンサーがあり、それぞれに異なるセンサーIDがあります。

これは監視目的にすぎないため、すべてのデータを正確に取得する必要はなく、最近の値を表示するだけです。

どちらが高速でしょうか?どうして?

sqlCommString = "SELECT * FROM Samples WHERE Timestamp = '" + DateTime10SecondsAgo + "' 

sqlCommString = "SELECT * FROM Samples ORDER BY Timestamp DESC LIMIT 20" 
+1

'Timestamp> = ...'をしたくないですか?また、両方を試して、どちらが速いのかを調べるのはなぜですか? –

+0

私はタイムスタンプを等しくしました。なぜなら、センサは毎秒読み取るので、読み取りの間ではなく、常に10秒遅れの読み取りのフルセットを収集するからです。しかし、ええ、ちょうど>を行うかもしれません。ありがとう。テストします。 – drinck

答えて

5

それは最初のものは、(それが最後のいくつかのサンプルを取得するために>=ではなく=でなければなりませんが)速いだろうと考えです。

目はすべて行を取得し、それらを並べ替えるために持っている(インデックスはソートが不要になるだろうが、このユースケースのためのコラム、あなたは非常に多くのべきインデックス)と、その後は離れていくつかをスローします。

最初のものは、必要なものだけを取得します。

一般に、できるだけ早くデータセットのサイズを小さくする方が効率的です(ある日はカーディナリティーを見てください。そういう場合には魅力的なコンセプトです)。

しかし、すべての最適化の場合と同様に、の測定値、推測しないでください!特に、クエリ自体がの1つののパフォーマンス式の一部であるデータベースでは、データの構成も大きな影響を与える可能性があります。

関連する問題