2017-04-05 9 views
0
SELECT FILE_SUB_RET_DATE_TIME 
FROM 
    (SELECT Y.FILE_SUB_RET_DATE_TIME, 
     ROW_NUMBER() OVER (partition by Y.WR_FILE_TRANS_INFO_ID order by Y.FILE_SUB_RET_DATE_TIME DESC) rowByID 
    FROM DPDBA.WORK_REQUEST_FILE_TRANS_AUDIT Y 
    WHERE Y.FILE_EVENT_TYPE = 'SUBMISSION' 
     AND Y.FILE_SUBMT_RETRL_STATUS = 'LEVEL1 POSTED' 
     AND Y.FILE_SUB_RET_DATE_TIME BETWEEN '11-DEC-2015' AND '03-FEB-2017') 
WHERE rowByID = 1; 

私はパフォーマンスの問題があり、この日付列のインデックスを追加する必要があります。私はそれがまっすぐなインデックスであろうとそれ以上のものであろうと、助けを求めています。Oracle用のOracleインデックス日付列の作成

+0

あなたの質問は非常に不明です。より具体的に言い換えることができますか? – SandPiper

+0

yes現在では、日付範囲(FILE_SUB_RET_DATE_TIME)の他の列とともにすべてのレコードを取得しています。今私は、この日付の列のインデックスを追加したいと思います。私は以下のようなまっすぐな日付のインデックスを使用することができますか、私はこのインデックスのいくつかの余分を追加する必要があります..インデックスIDX_WR_FILE_TRANS_AUDIT_RDTを ON WORK_REQUEST_FILE_TRANS_AUDIT(FILE_SUB_RET_DATE_TIME) –

答えて

0

現在のセッションNLS-Settingsに依存するため、DATE値と比較するときはSTRINGSを使用しないでください。 DATEリテラルまたはTO_DATE()、関数(TIMESTAMPおよびTO_TIMESTAMP)を使用します。

これは、OracleがFILE_SUB_RET_DATE_TIME列に索引を使用するかどうかに応じて、実行計画を通知します。

私はあなたのケースでサブクエリは必要ではないと思いますが、このクエリは同じ結果を返さなければなりません。

SELECT Max(FILE_SUB_RET_DATE_TIME) 
FROM DPDBA.WORK_REQUEST_FILE_TRANS_AUDIT Y 
WHERE Y.FILE_EVENT_TYPE = 'SUBMISSION' 
    AND Y.FILE_SUBMT_RETRL_STATUS = 'LEVEL1 POSTED' 
    AND Y.FILE_SUB_RET_DATE_TIME BETWEEN DATE '2015-12-11' AND DATE '2017-02-03' 
GROUP BY WR_FILE_TRANS_INFO_ID;