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

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top