Re: Adapter.Fill

Tech-Archive recommends: Speed Up your PC by fixing your registry



"Jan" <Jan@xxxxxxxxxxxxxxxxxxxxxxxxx> schrieb im Newsbeitrag news:9DFD50F5-E0E4-4B04-94F2-F355A76F76EC@xxxxxxxxxxxxxxxx

danke. Das die Abfrage abgebrochen wird, war mir nicht klar. Das würde
bedeuten, das wir auf den ersten Seiten eine vergleichsweise geringe
Serverlast haben und die steigt, je weiter der Benutzer nach hinten blättert,
sehe ich das richtig?

Klingt eigentlich gut und sinnvoll.

Genau so ist es. Der DataAdapter kapselt einen DataReader. Mit den Parameter "von" und "Anzahl" wird nur das Füllen des Puffers gesteuert. Und wenn der Füllvorgang zu Ende ist, dann mird der DataReader geschlossen, ohne dass die restlichen Datensätze noch gelesen werden.

Alternativ könnte man, wie Du auch schreibst, mit row_number und einer
Unterabfrage das Paging per SQL-Kommando realisieren. Da würde immer nur die
Datenmenge einer Seite zum Client transferiert, dafür habe ich aber eine
Sortierung, etwa nach ID, für die OVER-Klausel.

Eine Unterabfrage ist nicht zwingend nötig, eine Sortierung schon, da ohne Sortierung die Daten rein zufällig kommen und beim Aufruf der nächsten Seite vorher gelesene Datensätze nochmals enthalten sein können. Anstelle der Unterabfrage kann auch eine CTE genutzt werden, was schneller sein soll.

Wie schätzt Du das denn hinsichtlich Ressourcenanforderungen ein, welcher
Fall wird den Server-Rechner weniger belasten: Die Lösung mit Fill und
Abbruch oder das Paging per SQL-Kommando mit Unterabfrage, Sortierung und
row_number().

Mit CTE und row_number ist bestimmt am schnellsten, jedenfalls garantiert schneller als Fill mit Überlesen und Abbruch.

In diesem Fall müssen wir davon ausgehen, das SQL-Server und Webserver
zusammen auf einer Maschine laufen.

Warum das?


--
Viele Grüsse
Peter

.