Pregunta

He mesa (MEN) con 900.000 registros.

En esta tabla tengo IP campo y Tdate.

cuando corro consulta:

select * from MEN where IP = '1.1.1.1' and Tdate = TO_DATE('07/04/2010', 'DD/MM/YYYY')

se tarda mucho tiempo hasta que consiga resultado.

Trato de hacer índice de la siguiente manera:

create index
    my_in
on
   MEN (IP,Tdate );

pero la forma de ejecutar la consulta para obtener resultados rápidos?

i tratar esto:

select My_in from MEN where IP = '1.1.1.1' and Tdate = TO_DATE('07/04/2010', 'DD/MM/YYYY')

y obtener el error: ORA-00904

¿Fue útil?

Solución

Usted no utiliza el nombre de índice (My_in) en el selecto. La propia base de datos se darán cuenta de utilizar el índice. Por lo que sólo debe hacer lo mismo de selección como en el primer ejemplo.

Otros consejos

en su consulta

select My_in from MEN where IP = '1.1.1.1' and Tdate = TO_DATE('07/04/2010', 'DD/MM/YYYY')

la my_in es el nombre del índice. Si desea forzar el uso del índice, entonces se puede hacer alusión a su consulta

  select /*+INDEX(My_in MEN) */  * from MEN where IP = '1.1.1.1' and Tdate = TO_DATE('07/04/2010', 'DD/MM/YYYY')

Eso no es SQL válida. My_in es el nombre de su índice.

Trate de nuevo con:

select * 
  from MEN
 where IP = '1.1.1.1' 
   and Tdate = TO_DATE('07/04/2010', 'DD/MM/YYYY');

Como alternativa, si desea saber si el servidor va a utilizar un plan de utilización de su índice de nueva creación, se puede inspeccionar la salida del comando explain:

explain plan for
select * 
  from MEN
 where IP = '1.1.1.1' 
   and Tdate = TO_DATE('07/04/2010', 'DD/MM/YYYY');

Tome un vistazo a la documentación de Oracle en Explain Plan . Le ayudará con esto y muchas otras optimizaciones SQL.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top