これを編集して、ユーザーのフィルタリングおよび並べ替えオプションの入力パラメーターを実装する必要がありますが、一般的な原則が適用されます。2000/2001のタイムフレームでSQL 2000を使用し、90Mのレコードテーブルを使用してこの手法を使用し、150の高速ページングを実現しました。 200k行の結果セット。キーのみが一時テーブルにあるため、非常に狭く、非常に小さい一時テーブルであり、パフォーマンスは高速です(このステップでは、テーブル自体ではなく、メインテーブルのインデックスを読み取るだけで済みます)。 、実際の(小さい)戻り結果セット(@PageSize行のみ)のメインテーブルから実際にデータを生成する場合、クエリはごく少数のレコードを読み取るだけで済みます。
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