2011-01-07 11 views
1

Jungen mit i Tabelle habe die Spalte st_date enthalten Daten mit Datentyp-Nummer und den Werten wäre wie diese 20.101.201 d.h (01-DEC-2010) hat.Oracle SQL eine Spalte mit Zahlendatentyp zwischen

Wenn ich eine Select-Abfrage schreibe mit der Klausel zwischen den Daten für die Daten zwischen den Grenzen liegt, meine Frage ist, ob zwischen oder kleiner oder größer als Operator, die Leistung effizient ist.

select id, sum(duration), sum(hit_count) 
from A 
where st_date between 20101101 AND 20101130 
group by id 

Die Tabelle hat Millionen von st_date.Is über einem partitionierten Datensätzen oder besser sind als die unten ein.

select id, sum(duration), sum(hit_count) 
from A 
where st_date >= 20101101 AND st_date < 20101130 
group by id 

bitte lassen Sie mich Ihre Antworten wissen.

Antwort

5

Das zweite ist leistungsfähiger, weil sie weniger Daten auswählt :)

Intern wird between neu geschrieben als> = und = <. Sie können es im Prädikateninformationsteil des Ausführungsplans sehen.

explain plan for select * from t1 where n between 100 and 200; 

Predicate Information (identified by operation id): 
--------------------------------------------------- 

    1 - filter("N">=100 AND "N"<=200) 

Auch wenn wir schon dabei sind:

Lagern Sie keine Datumsangaben als Zahlen.

Oracle weiß, dass der Unterschied zwischen date '2010-12-31' and date '2011-01-01' 1 Tag ist. Oracle weiß auch, dass der Unterschied zwischen 201und 20110101 ist 8870.

Denken Sie darüber nach, was das Kardinalitätsschätzungen macht.

4

BETWEEN ist Inclusive. das bedeutet >= unteren UND <= oberen.

So sind Ihre Beispiele nicht ganz gleich. Wenn Sie das Problem beheben, wird der gleiche Abfrageplan erstellt.

Verwendung von BETWEEN ist etwas klarer.

+0

ja ich werde die obere Grenze beheben. Vielen Dank –

1

Als Mitch Weizen erklärte in seinem answer nach wie

where st_date >= 20101101 AND st_date <= 20101130 

dann zwei Abfragen die gleichen Ergebnisse erzeugen wird die dritte Zeile der zweiten Abfrage festgelegt zu haben. Es wird keine Unterschiede in Bezug auf Abschlusszeit entweder geben.

Ich persönlich benutze BETWEEN wann immer ich Zeit/Datum Intervalle definieren muss.

Verwandte Themen