Wir geben zunächst einige Haupt-Paging-Methoden und Kernaussagen und geben dann direkt die Schlussfolgerung. Interessierte Leser können sich die folgenden Daten für mehrere häufig verwendete Paging-Methoden für gespeicherte Prozeduren ansehen.
TopN-Methode
Wählen Sie Top(@PageSize) aus TableName aus, wobei die ID nicht IN ist
(Wählen Sie die oberste (@PageIndex-1)*@PageSize) ID aus dem Tabellennamen aus, wobei .... sortieren nach ... )
wo .... bestellen nach ...
temporärer Tisch
Kopieren Sie den Codecode wie folgt:
deklariere @indextable table(id int Identity(1,1),nid int,PostUserName nvarchar(50))
deklariere @PageLowerBound int
deklariere @PageUpperBound int
setze @PageLowerBound=(@pageindex-1)*@pagesize – untere Grenze
set @PageUpperBound=@PageLowerBound+@pagesize – Obergrenze
set rowcount @PageUpperBound
Einfügen in @indextable(nid,PostUserName) select ReplyID,PostUserName from TableName order by ......
Wählen Sie * aus TableName p,@indextable t aus, wobei p.ID=t.nid
und t.id>@PageLowerBound und t.id<=@PageUpperBound Reihenfolge nach t.id
CTE – 2005 neue Syntax, ähnlich wie temporäre Tabellen, aber der Lebenszyklus ist etwas anders. Hier ist nur eine Anwendung davon.
mit cte_temp – Definieren Sie die Nullzeittabelle. PageIndex ist ein berechnetes Feld, das die Seitenzahl der Suchergebnisse speichert.
As (ceiling((Row_Number() over(order by .... )-1)/@pagesize as int) as PageIndex,* from TableName where.....)
select * from cte_temp where pageindex=@pageindex-1;
abschließend:
TopN ist am schnellsten, wenn die Anzahl der Seiten kleiner als 10 ist. Sie können die Verwendung von CTE und der temporären Tabelle in Betracht ziehen tempdb explodiert und IO steigt.
Leistungsvergleich
Testumgebung: win2003server, Sqlserver2005, Bibliotheksgröße 2.567.245 Zeilen, keine Where-Klausel, Seitengröße 50 während des Tests, Seitenzahl als Variable
Nehmen Sie 0, 3, 10, 31, 100, 316, 1000, 3162 ... Seiten, was dem Index von 10 entspricht. Die Testergebnisse sind wie folgt
Anzahl der SeitenTopN CTE Temporäre Tabelle (mit Cache) Temporäre Tabelle (ohne Cache)
Gespeicherte Prozedur-CTE-Verbesserungen, die das Unternehmen verwendet
1 3 12 10 101 457 7302
3 15 7 79 5524 464 7191
10 127 5504 88 3801 464 6116
32 588 9672 122 3601 976 7602
100 4680 9738 166 4235 486 7151
316 45271 9764 323 3867 522 7255
1000 Null 9806 869 2578 635 8948
3162 Null 9822 2485 4110 12460 8210
10000 Null 9754 7812 11926 14250 7359
31623 Null 9775 18729 33218 15249 7511
100000 Null Null 31538 55569 17139 6124
Dateninterpretation und -analyse
Temporäre Tabellen werden in zwei Zeittypen unterteilt: Cache oder nicht. Die CTE-Verbesserung reduziert nur die Anzahl der in der temporären CTE-Tabelle ausgewählten Spalten Die Zeit kann nicht berechnet werden (die Zeit ist zu lang). Die Dateneinheit ist Millisekunden.
Aus den obigen Daten können wir ersehen, dass TopN auf den ersten 32 Seiten Vorteile hat, aber mit zunehmender Seitenzahl nimmt die Leistung schnell ab. Die CTE-Verbesserung ist besser als die CTE, mit einer durchschnittlichen Verbesserung von etwa zwei Sekunden Es ist immer noch besser als die temporäre Tabelle Langsam, aber wenn man bedenkt, dass die temporäre Tabelle die Größe der Protokolldatei erhöht und viele E/A verursacht, hat CTE auch seine eigenen Vorteile. Die derzeit vom Unternehmen verwendete gespeicherte Prozedur ist sehr effizient. Die Leistung nimmt jedoch ab, wenn die Seitenzahl später ist.