【问题标题】:oracle datetime field indexingoracle 日期时间字段索引
【发布时间】:2011-02-20 14:42:28
【问题描述】:

我们如何在 oracle 中对日期时间字段执行索引。我们应该能够搜索特定的年份

谢谢

【问题讨论】:

    标签: oracle indexing


    【解决方案1】:

    只需创建如上所示的索引。 请勿使用 TRUNC FUNCTION,因为它会忽略任何索引。比如我的datecreate字段有下一个格式03.12.2009 16:55:52所以我以前用过

    trunc(datecreate, 'dd')=to_date(to_char(sysdate,'dd.mm.yyyy'),'dd.mm.yyyy')
    

    它工作得非常缓慢(大约 5 秒)!!!现在我使用下一个表达式:

    datecreate>=to_date(to_char(sysdate,'dd.mm.yyyy'),'dd.mm.yyyy') and sw.datecreate<to_date(to_char(sysdate+1,'dd.mm.yyyy'),'dd.mm.yyyy')
    

    我的查询在0,01 sec中执行

    【讨论】:

      【解决方案2】:

      要在 Oracle 中创建索引,请使用:

      CREATE INDEX your_index_name ON your_table_name(your_column_name)
      

      有关 Oracle 索引创建的更多信息,请阅读this link

      更正和澄清
      如果您使用函数来隔离日期的组件(即:EXTRACTTRUNC),则列上的索引将无济于事。但是,如果您提供日期范围,索引会有所帮助:

      WHERE your_date_column BETWEEN TO_DATE('2010-01-01', 'YYYY-MM-DD')
                                                  AND TO_DATE('2010-12-31', 'YYYY-MM-DD')
      

      但是,您可以在 Oracle 中创建基于函数的索引:

      CREATE INDEX your_index_name 
          ON your_table_name(EXTRACT(YEAR FROM your_column_name))
      

      ...DBA 怀着热情厌恶。

      【讨论】:

        【解决方案3】:

        您可以直接索引 DATE 列(在 Oracle 中存储日期和时间):

        CREATE INDEX ix ON table (column)
        

        如果您构建查询以执行 RANGE SCAN,Oracle 将能够直接使用此索引。例如,如果您想检索 2010 年的行:

        SELECT ...
          FROM table
         WHERE column >= DATE '2010-01-01'
           AND column < DATE '2011-01-01'
        

        此索引还可用于回答特定月份、日期或任何其他范围的查询。

        【讨论】:

          【解决方案4】:

          添加一个不绑定到列的索引,而是从该列中提取年份的表达式:

          create index sample_index on YourTable (extract(year from YourDateColumn)) tablesapce YourIndexSpace;
          

          当您使用该表达式查询表时,Oracle 将使用索引。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2010-11-09
            • 1970-01-01
            • 1970-01-01
            • 2015-05-14
            • 1970-01-01
            • 2015-06-16
            • 1970-01-01
            相关资源
            最近更新 更多