2

特定の曜日の特定の時間のデータを 10 週間まで取得する必要があります。私が取り組んでいるDBはOracleです。タイムスタンプフィールドで次の条件を思いつきました:

TO_CHAR(hy.tstamp,'HH24')='10' 
AND hy.tstamp > sysdate - 70  
AND mod(extract ( day from sysdate-1) - extract ( day from hy.tstamp), 7) =0 

誰かが私に「tstamp を囲む関数は絶対にない」と言った (パフォーマンス上の理由から?)。タイムスタンプフィールドの操作なしでどのように条件を指定しますか?

4

2 に答える 2

4

これは、パフォーマンスについて不平を言っている人は、関数ベースのインデックスについて聞いたことがないように思えます。

Create index char_hy_stamp on my_table(to_char(hy.tstamp,'HH24'));

これにより、間違いなく説明計画の一部である全表スキャンを回避できます。sqlfiddle が機能するようになるとすぐに、そこから先に進むことができます。

于 2013-05-08T19:51:41.917 に答える