【问题标题】:Creation of Oracle index date column for Oracle为 Oracle 创建 Oracle 索引日期列
【发布时间】:2017-04-05 19:45:23
【问题描述】:
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;

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

【问题讨论】:

  • 你的问题很不清楚。你能把它改写得更具体吗?
  • 是的,目前我们正在获取日期范围 (FILE_SUB_RET_DATE_TIME) 内的所有记录以及其他列。现在我想为这个日期列添加索引。我可以使用像下面这样的直接日期索引还是我需要为这个索引添加一些额外的.. CREATE INDEX IDX_WR_FILE_TRANS_AUDIT_RDT ON WORK_REQUEST_FILE_TRANS_AUDIT (FILE_SUB_RET_DATE_TIME)

标签: sql oracle indexing


【解决方案1】:

在与 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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-22
    • 1970-01-01
    相关资源
    最近更新 更多