Warum wählen Sie oben ... Reihenfolge nach indizierten Spalte noch sortieren?

8

Ich habe den folgenden Index erstellt, um die select top-Anweisung abzudecken.

%Vor%

Aber es dauert noch eine Weile (19 Sekunden auf meinem Tisch mit 50 Millionen Zeilen) und der Ausführungsplan zeigt, dass es immer noch ein "Sortieren" gibt?

Der Ausführungsplan zeigt

  

Wählen Sie (Kosten: 0%) ← Nach oben (Kosten: 0%) ← Parallelität (Sammeln von Streams) (Kosten: 0%) ← Sortieren (Top N Sortieren) Kosten: 93% ← Index Scan (NonClustered) [T. ix_] Kosten: 7%

Ausführungsplan

%Vor%     
ca9163d9 28.10.2016, 20:58
quelle

1 Antwort

5

Ihre Tabelle ist mit B partitioniert.

Der Index erbt dieses Partitionierungsschema, sofern Sie nichts anderes angeben. Zum Beispiel mit

%Vor%

(In diesem Fall wird es nicht ausgerichtet und verhindert einige Operationen wie das Umschalten von Metadaten)

Der niedrigste "A" -Wert befindet sich möglicherweise in einer beliebigen Partition.

Dies ist nicht sehr gut optimiert. Sie können den ausgerichteten Index beibehalten und diesen Code auf der Grundlage des hier angegebenen Codes verwenden

%Vor%

Es wird die obersten 20 Zeilen von jeder der 41 Partitionen (ohne eine Sortierung) erhalten, dann sortieren Sie einfach die 820 Zeilen, die daraus resultieren, um die letzten 20 zu erhalten (anstatt der ganzen 42 Millionen).

    
Martin Smith 29.10.2016, 16:52
quelle