2017-06-26 9 views
0

なぜbetweenオペレータは単一の条件に比べて実行に時間がかかります。対Vs単一条件

select a,b from table where trunc(a) between '2000-04-01' and '2016-03-31' 

select a,b from table where trunc(a)>='2000-04-01' 

まず1でも、レコードの同じなしがあり、二番目に比較を実行するので時間がかかります。

+1

関数result-truncをフィルタリングしています。それはいつもより長くかかるでしょう。たぶん、この場合は2回適用されています。パフォーマンスを向上させるには、 'a> = '2000-04-01'と<'2016-04-01'を使用します。 –

+0

クエリプランを表示すると、何が間違っているかを確認するのに役立ちます。 – Carra

+0

@ Dan Bracukでもtrunc機能を削除しましたが、改善はありません – Rams

答えて

0

なぜ最初のものが長くかかるのかわかりません。クエリを一度だけ実行した場合は、おそらくコールドキャッシュとウォームキャッシュのためです。

はしかし、私はbetweenせずにクエリを記述する方がよいと思う:

where a >= '2000-04-01' and a < '2016-04-02' 

これは、2つの理由で優れています。まず、クエリはインデックスを利用することができます(日付範囲が広いため、おそらく重要ではありません)。さらに、これは、aに時間コンポーネントがあるかどうかに関係なく機能します。

+0

素早く対応してくれてありがとうございますが、改善はありません – Rams

+0

@HoneyBadger 。 。あなたは正しい。私はタイプミスを修正しました。ありがとうございました。 –

関連する問題