SELECT COUNT (*) mit ORDER BY

8

Werden die folgenden zwei Abfragen auf dieselbe Weise ausgeführt?

SELECT COUNT(*) from person ORDER BY last_name;

und

SELECT COUNT(*) from person;

So oder so sollten sie die gleichen Ergebnisse anzeigen, also war ich neugierig, ob die ORDER BY gerade ignoriert wird.

Der Grund, warum ich frage, ist, weil ich eine paginierte Tabelle zeige, in der ich 20 Datensätze gleichzeitig aus der Datenbank bekomme und dann eine zweite Abfrage abfange, die die Gesamtzahl der Datensätze zählt. Ich möchte wissen, ob ich die gleichen Kriterien verwenden sollte, die die erste Abfrage verwendet, oder ob ich die Sortierung aus den Kriterien entfernen sollte?

    
Danny 30.01.2012, 20:45
quelle

3 Antworten

10

Laut dem Ausführungsplan sind die beiden Abfragen unterschiedlich. Zum Beispiel die Abfrage:

%Vor%

Wird mir geben:

%Vor%

Wie Sie sehen können, drücken wir USER_PK, welches der Primärschlüssel dieser Tabelle ist.

Wenn ich nach einer nicht indizierten Spalte sortiere:

%Vor%

Ich werde bekommen:

%Vor%

Das heißt, wir haben einen vollständigen Tabellenscan durchgeführt (viel höhere Knotenkosten)

Wenn ich nach dem Primärschlüssel (der bereits Index ist) sortiere, ist Oracle klug genug, den Index zu verwenden, um diese Art zu sortieren:

%Vor%

Das sieht dem ersten Ausführungsplan sehr ähnlich.

Also, die Antwort auf Ihre Frage ist absolut nicht - sie sind nicht das Gleiche. Die Sortierung nach einem Index, den Oracle ohnehin schon sucht, führt jedoch wahrscheinlich zu demselben Abfrageplan.

    
Mike Christensen 30.01.2012, 20:57
quelle
1

Natürlich nicht. Es sei denn, der Nachname ist der Primärschlüssel und Sie sind bereits damit bestellt.

    
Sid 30.01.2012 20:47
quelle
1

Der Oracle-Abfrageoptimierer führt für die erste Version tatsächlich eine Sortierung durch (ich habe dies überprüft), da aber beide Abfragen nur eine Zeile zurückgeben, ist der Leistungsunterschied sehr gering.

BEARBEITEN:

Mike's Antwort ist korrekt. Der Leistungsunterschied kann möglicherweise signifikant sein.

    
GriffeyDog 30.01.2012 20:52
quelle

Tags und Links