2010-05-17 98 views

回答

8

在Oracle中创建一个索引,使用:

CREATE INDEX your_index_name ON your_table_name(your_column_name) 

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

纠错&澄清
如果使用功能分离的日期(IE:EXTRACT,或TRUNC)的组成部分,在列的索引也无济于事。但指数会帮助,如果你提供的日期范围:

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们不愿意与激情。

0

添加未绑定到列提取年从该列的索引,而是一种表达:

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

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

3

你可以索引DATE列(存储日期和时间,甲骨文)直接:

CREATE INDEX ix ON table (column) 

甲骨文将能够,如果你建立你的查询,以便执行范围扫描直接使用这个指数。例如,如果你想从2010检索行:

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

该指数还可以用来回答特定的月,日或任何其他范围查询。

0

只需创建如上所示的索引。 请勿使用TRUNC功能,因为它忽略任何索引。举例来说,我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

执行
相关问题