2010-05-17 18 views

Respuesta

8

Para crear un índice en Oracle, utilice:

CREATE INDEX your_index_name ON your_table_name(your_column_name) 

Para obtener más información sobre la creación de índices de Oracle, leer this link.

Corrección & Aclaración
Si se utiliza una función de aislar un componente de una fecha (IE: EXTRACT o TRUNC), un índice en la columna no ayudará. Pero un índice ayudará si usted proporciona un intervalo de fechas:

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

Sin embargo, puede crear índices basados ​​en funciones de Oracle:

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

... que los DBA reacio con una pasión.

0

Añadir un índice que no está unido a una columna, sino una expresión que extraen el año a partir de esa columna:

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

Cuando consultar la tabla usando esa expresión, Oracle usará el índice.

3

Puede indexar una columna DATE (que almacena la fecha y la hora en Oracle) directamente:

CREATE INDEX ix ON table (column) 

Oracle será capaz de utilizar este índice directamente si se construye la consulta con el fin de realizar un análisis de GAMA. Por ejemplo, si desea recuperar filas de 2010:

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

Este índice también se puede utilizar para responder a las consultas de un mes específico del día o de cualquier otra variedad.

0

Solo crea el índice como se muestra arriba. NO USETRUNCFUNCIÓN, porque ignora los índices. Por ejemplo, mi campo datecreate tiene al lado formato 03.12.2009 16:55:52 Así que solía utilizar

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

y funcionó muy lentamente (aproximadamente 5 segundos) !!! Ahora uso la expresión siguiente:

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

y mi consulta se ejecuta en 0,01 sec