为Oracle创建Oracle索引日期列

时间:2017-04-05 19:45:24

标签: sql oracle indexing

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;

我遇到了一些性能问题,我们需要为这个日期列添加索引,我正在寻找帮助,无论是直接索引还是其他任何东西......

1 个答案:

答案 0 :(得分:0)

与DATE值比较时不应使用STRINGS,因为它取决于当前会话NLS设置。使用DATE文字或TO_DATE(),函数(分别为TIMESTAMPTO_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;