Sie müssen dies bearbeiten, um Ihre Eingabeparameter für die Filter- und Sortieroptionen des Benutzers zu implementieren, aber das allgemeine Prinzip wird gelten. Ich habe diese Technik mit SQL 2000 im Zeitrahmen 2000/2001 mit einer Tabelle mit 90 Mio. Datensätzen verwendet, um ein schnelles Paging für Ergebnismengen mit 150-200k Zeilen zu erreichen. Da sich nur der Schlüssel in der temporären Tabelle befindet, handelt es sich um eine sehr schmale, sehr kleine temporäre Tabelle, und die Leistung ist schnell (und für diesen Schritt muss nur der Index der Haupttabelle gelesen werden, nicht die Tabelle selbst). Wenn dann tatsächlich Daten aus der Haupttabelle für die tatsächliche (kleinere) Ergebnismenge (nur @PageSize-Zeilen) generiert werden, muss die Abfrage nur wenige Datensätze lesen...
Create Procedure GetPagedData
@Page Integer = 1,
@PageSize Integer = 100,
@UsersFilteringCOnditions,
@UsersSortOptions
As
Set NoCount On
Declare @Start Integer,
Declare @End Integer
Declare @NumRecs Integer
-- Declare a temp table variable to hold all the pk values...
Declare @Keys Table (rowNum integer Identity Primary Key NotNull,
keyVal Integer Not Null)
-- Insert all the Primary Keys into the temp table variable...
Insert @keys(keyVal)
Select PrimaryKey From MyMillionRowTable
Where UsersFilterConditionsAreTrue
Order By UsersSortOptions
-- Then, select from your big table only the data
-- from the rows for the page the user wants
Select @NumRecs = Count(*) From Keys
Set @End = @Page * @PageSize
Set @Start = @End + 1 - @PageSize
Select {Insert ColumnListHere}
From MyMillionRowTable T
Join @Keys K On K.KeyVal = T.PrimaryKey
Where K.rowNum Between @Start And @End