Index auf Oracle 11g Frage
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
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.