なぜ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でも、レコードの同じなしがあり、二番目に比較を実行するので時間がかかります。
なぜ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でも、レコードの同じなしがあり、二番目に比較を実行するので時間がかかります。
なぜ最初のものが長くかかるのかわかりません。クエリを一度だけ実行した場合は、おそらくコールドキャッシュとウォームキャッシュのためです。
はしかし、私はbetween
せずにクエリを記述する方がよいと思う:
where a >= '2000-04-01' and a < '2016-04-02'
これは、2つの理由で優れています。まず、クエリはインデックスを利用することができます(日付範囲が広いため、おそらく重要ではありません)。さらに、これは、a
に時間コンポーネントがあるかどうかに関係なく機能します。
素早く対応してくれてありがとうございますが、改善はありません – Rams
@HoneyBadger 。 。あなたは正しい。私はタイプミスを修正しました。ありがとうございました。 –
関数result-truncをフィルタリングしています。それはいつもより長くかかるでしょう。たぶん、この場合は2回適用されています。パフォーマンスを向上させるには、 'a> = '2000-04-01'と<'2016-04-01'を使用します。 –
クエリプランを表示すると、何が間違っているかを確認するのに役立ちます。 – Carra
@ Dan Bracukでもtrunc機能を削除しましたが、改善はありません – Rams