indice su domanda Oracle 11g
Domanda
Ho tavolo (uomini) con 900.000 record.
In questa tabella ho campo IP
e Tdate
.
quando ho eseguito query:
select * from MEN where IP = '1.1.1.1' and Tdate = TO_DATE('07/04/2010', 'DD/MM/YYYY')
ci vuole molto tempo fino a quando ottengo dei risultati.
Io cerco di fare index in questo modo:
create index
my_in
on
MEN (IP,Tdate );
ma come per eseguire la query per ottenere risultati velocemente?
provo questo:
select My_in from MEN where IP = '1.1.1.1' and Tdate = TO_DATE('07/04/2010', 'DD/MM/YYYY')
e ottenere errore: ORA-00904
Soluzione
Non si utilizza il nome di indice (My_in) nella select. Il database stesso capirà di utilizzare l'indice. Quindi, si deve solo fare lo stesso di selezione come nel tuo primo esempio.
Altri suggerimenti
nella query
select My_in from MEN where IP = '1.1.1.1' and Tdate = TO_DATE('07/04/2010', 'DD/MM/YYYY')
la my_in è il nome di indice. Se si vuole forzare l'utilizzo dell'indice, allora si può suggerire la query
select /*+INDEX(My_in MEN) */ * from MEN where IP = '1.1.1.1' and Tdate = TO_DATE('07/04/2010', 'DD/MM/YYYY')
Questo non è SQL valida. My_in
è il nome del tuo indice.
Prova di nuovo con:
select *
from MEN
where IP = '1.1.1.1'
and Tdate = TO_DATE('07/04/2010', 'DD/MM/YYYY');
In alternativa, se volete sapere se il server utilizzerà un piano utilizzando l'indice appena creato, si può controllare l'output 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');
Date un'occhiata alla documentazione di Oracle su SPIEGARE PIANO . Essa vi aiuterà con questo e molte altre ottimizzazioni SQL.