2012-03-21 16 views
1

JavaプログラムからSQLクエリを実行して、過去10日間に発生したタイムスタンプのテーブルからタイムスタンプ(ミリ秒単位で格納)を取得しているとします。日付に基づくSQLフィルタリング

私はこれを行うには、次の2つの方法を考えることができます仕事をと同等のPERFワイズテストのように思われます両方

db.execSql("select * from timestamps where timestamp > (SELECT strftime('%s', 'now', '-10 days') * 1000)"); 

または

// First calculate in the number of milliseconds in Java 
long t = System.currentTimeInMillis() - (10 * 86400000 /* millis in a day */); 
db.execSql("select * from timestamps where timestamp > " + t); 

。 1つの方法が他の方法よりも優先されますか?それは問題ですか?これを行うための慣用的な方法はありますか?

答えて

1

私は一般的に2番目の方法を使用することをお勧めします:日数や10日間のウィンドウが計算される日を変更する必要が生じた場合、処理するのがより簡単で理解しやすく、それはJavaのものです。

0

これを証明する決定的なテストはありませんが、これはちょうど推測ですが、私はソフトウェアで(Java経由で)計算し、そこに「ボトルネック」を入れたいと思います。パフォーマンスは同じではありますが、DBが不必要な作業をしているのではないと思います。

私の推測では、同じソフトウェアを実行している多くのクライアントがいるかもしれないが、おそらくすべてが同じデータベースを照会していると思われる。したがって、私は後者の例を持っています。

2

境界の正確さはどれくらい重要ですか?サーバによって見られる時間は、Java VM上の時間と数時間(例えば、時間帯)異なる可能性がある。私は一般的にサーバ時間ベースのものを使用しますが、私の通常のアプリケーションでは、バケット境界が滑らないように、開始日ではなく、NOW()を使用したいと考えています。

関連する問題