2010-05-17 16 views
10

Oracle'da datetime alanında dizin oluşturma işlemini nasıl yaparız.oracle datetime alan dizini oluşturma

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

sizi: Biz o sütundan yıl ayıklamak bir sütuna bağlı olmayan bir indeks, ama bir ifade ekleyin belirli yıl için

Teşekkür

cevap

8

kullanın:

CREATE INDEX your_index_name ON your_table_name(your_column_name) 

Oracle indeks oluşturma hakkında daha fazla bilgi için, this link okuyun. , Sütun üzerinde bir dizin yardımcı olmaz: Bir tarih (EXTRACT veya TRUNC IE) bir bileşenini izole etmek bir işlevi kullanırsanız

Düzeltme & açıklama. Bununla birlikte Oracle fonksiyonu bazlı endeksler oluşturabilir

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

:

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

... tutkuyla DBA isteksiz bir tarih aralığı sağlamak Ama eğer bir dizin yardımcı olacaktır.

0

aramak gerekir Bu ifadeyi kullanarak tabloyu sorgula, Oracle dizini kullanacak. Oracle'da bir dizin oluşturmak için

3

doğrudan indeksi (Oracle tarih ve saati saklayan) bir TARİH sütunu can Sen:

CREATE INDEX ix ON table (column) 

Oracle bir RANGE SCAN gerçekleştirmek üzere Sorgunuzu inşa halinde doğrudan bu dizini kullanmak mümkün olacak. Eğer 2010'dan satırları almak istiyorsanız Örneğin,:

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

Bu indeks de belirli bir ay, gün veya başka herhangi bir aralığı için sorguları yanıtlamak için kullanılabilir.

0

Sadece yukarıda gösterilen gibi bir dizin oluşturun. TRUNCFUNCTION'U KULLANMAYIN, çünkü herhangi bir dizin görünmez. Örneğin, benim datecreate alan bir sonraki biçimi 03.12.2009 16:55:52 sahiptir yüzden

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

kullanmak için kullanılan ve (yaklaşık 5 saniye) çok yavaş çalıştı !!! Şimdi bir sonraki ifadeyi kullanın:

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') 

ve benim sorgu 0,01 sec

içinde yürütür