índice en cuestión Oracle 11g
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
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 ??p>
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 ??p>
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.