2010-05-17 126 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

執行
相關問題