2012-02-17 8 views
5

次のうちどれが実装するのがベストか、その理由は不思議です。SQL: "BETWEEN"と "current_date - number"の差異

select * from table1 where request_time between '01/18/2012' and '02/17/2012' 

select * from table1 where request_time > current_date - 30 
+4

日付がハードコーディングされていないため、ドア#2が優先されます。D – bernie

+0

日付をハードコードするのではなく、変数を使用します。私はPythonで作業し、そこにdatetime変数を使用します。それを言って、ドア#1が優先されますか? – Sri

+0

私は過度にリテラルになっていて、本当の問題を避けていました。私は異なる状況で両方を使用します。私は2つの間で知覚できるパフォーマンスの違いは見ていません。 – bernie

答えて

2

間の包括的な範囲は、あなたが2と10の間でのIDのようなクエリを発行したときに2と10の値はまた、あなたがこれらの値を排除したいfetched.Ifになります。すなわちあり使用>と<。

インデックスが適用されている場合は、日付の列>と<の間にインデックスを使用することもできます。

+3

私は、 'BETWEEN'が関係演算子ができるインデックスを同じように使うことができると確信しています。 –

+0

私はrequest_time列でインデックスを作成しています。この表は、1日に100万レコードに達します。 2番目のアプローチを使用すると、日付を取得するために永遠にかかる。 – Sri

+0

は異なるdbmsの異なる動作があるかもしれない – Shaheer

4

私は私のデータベースに私の日付テーブルの一部を介して2つのクエリを実行し、ANALYZE EXPLAIN使用して私は、これらの結果が見つかりました:

explain analyze 
select * from capone.dim_date where date between '01/18/2012' and '02/17/2012' 

は合計ランタイム:22.716ミリ秒

explain analyze 
select * from capone.dim_date where date > current_date - 30 

合計ランタイム:65.044 ms

したがって、第1のオプションがより最適であるように見えます。もちろんこれは私のDBMSに偏っていますが、これは私が得た結果です。

テーブルの日付は1900年から2099年までです。そのテーブルはかなり大きく、ちょっとした小さなテーブルではありません。