2016-06-14 6 views
2

Ich bin neu in SQL und ich bin auf der Suche nach einer schnelleren Möglichkeit, eine recht einfache Anweisung auszuführen. Es gibt mehrere Werte in einer Tabelle, die übereinstimmen sollten, um die Zeilen zurückzugeben. Gibt es einen schnelleren Weg? Die Tabelle ist eine Ansicht, in der ich keine Administratorrechte habe, um Änderungen vorzunehmen.SQL, schneller Weg als wo und?

select * from TABLE.View_xy 
where location=1 
and b=2 
and c=3 
and d=4 
and e=5 
and f=6 
and manDate between (TIMESTAMP '2016-06-01 00:00:00') and (TIMESTAMP '2016-06-02 23:59:59') 
and g=7 
+2

Das ist der schnellste Weg, erstellen Sie einfach einen Index für die = Prädikate, und beenden Sie ihn mit dem zwischen Eins. – Gar

+1

@Gar obwohl sie wahrscheinlich keine Berechtigungen haben und es ist eine Ansicht, keine Tabelle. –

+0

Put Indizes auf die entsprechenden zugrunde liegenden Felder würde helfen, es sei denn, einige dieser Felder sind derivative/berechnete Werte. –

Antwort

1

Nun, wenn sie ein Blick und Sie können es nicht einstellen, gibt es nicht viel Sie mit dieser Abfrage tun können, um sie effizienter zu machen (jeder denkt, sind nur grundlegende Filterbedingungen).

Was kann ich vorschlagen, ist dies:

eine temporäre Tabelle erstellen die Ansicht der Daten, Index in dieser Tabelle und führen Sie dann die Auswahl auf dem Tisch enthält. Sie können dies so oft wie nötig tun.

CREATE TABLE tmp_for_select AS 
SELECT * FROM TABLE.View_xy; 

CREATE INDEX IND_NAME ON tmp_for_select(location,b,c,d,e,f,g,manDate) ; 

select * from tmp_for_select 
where location=1 and b=2 and c=3 
    and d=4 and e=5 and f=6 
    and manDate between (TIMESTAMP '2016-06-01 00:00:00') and (TIMESTAMP '2016-06-02 23:59:59') 
    and g=7; 

DROP TABLE tmp_for_select; 
+0

"unzureichende Berechtigungen" :) – muka90

+0

Sie können nicht einmal eine andere Tabelle erstellen? – sagi

+0

ORA-01031 - "unzureichende Berechtigungen" * Ursache: Es wurde versucht, eine Datenbankoperation ohne die erforderlichen Berechtigungen auszuführen. : "( – muka90