Frage

Ich habe Tabelle (MEN) mit 900.000 Datensätzen.

In dieser Tabelle ich habe Feld IP und Tdate.

, wenn ich laufe Abfrage:

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

Es dauert lange, bis ich Ergebnis erhalten.

ich versuche Index wie folgt zu machen:

create index
    my_in
on
   MEN (IP,Tdate );

aber wie die Abfrage auszuführen schnell Ergebnis zu bekommen?

ich versuche, dieses:

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

und erhalten Fehler: ORA-00904

War es hilfreich?

Lösung

Sie verwenden nicht die Indexnamen (My_in) in der Auswahl. Die Datenbank selbst wird herausfinden, um den Index zu verwenden. Sie sollten also genauso wie im ersten Beispiel die gleiche Auswahl tun.

Andere Tipps

in der Abfrage

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

die my_in ist der Indexname. Wenn Sie den Index Nutzung erzwingen wollen, dann können Sie Ihre Abfrage-Hinweis

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

Das ist nicht gültig SQL. My_in ist der Name Ihres Index.

Versuchen Sie es erneut mit:

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

Alternativ, wenn Sie wissen wollen, ob der Server einen Plan mit Ihrem neu erstellten Index verwenden, können Sie die Ausgabe des explain Befehls überprüfen können:

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

Werfen Sie einen Blick auf die Oracle-Dokumentation auf EXPLAIN PLAN . Es wird Sie mit diesem und vielen anderen SQL Optimierungen helfen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top