Heute wollte ich einen Trick vorstellen, wie man es schafft eine Ergebnismenge seitenweise zu lesen. Das ist sinnvoll, wenn man in der Anwendung immer nur eine "Seite" voller Datensätze anzeigt. Es wäre in dem Fall Quatsch Tausende von Sätzen zu lesen und am Client dann doch nur eine oder zwei Seiten anzuzeigen.
Leider wird das derzeit schlaueste Verfahren im Artikel "Server Side Paging using SQL Server 2005" auf SQLTeam.com so schön beschrieben, dass ich mir meine Version an dieser Stelle schenke. Allerdings möchte ich ein paar persönliche Bemerkungen ergänzen:
- Ich würde generell zu einem Index auf dem Sortierkriterium raten, am besten sollte man auf dem Clustered-Index "pagen". Für meinen untigen Trick ist das ein Muss.
- Es ist wichtig, dass man die Menge der Datensätze mittels der Where-Klause auf die wirklich benötigten Sätze einschränkt, sonst beschäftigt man den SQL-Server unnötig. Aber ich gehe davon aus, dass Ihr das schon macht.
- Wenn man sehr, sehr viele Datensätze im Ergebnis hat über das man "pagen" will, dann würde ich dazu raten, die Query so abzuspecken, dass nur der Primärschlüssel in der Common-Table-Expression ist. Dann kann die "Zählung" auf dem Sortierkriterium (und der Where-Klausel) mittels "Index Covering" durchgeführt werden. Das Ergebnis wird dann wieder mit der originalen Tabelle verjoint.
Frohes "pagen"…