次のT-SQLストアドプロシージャは非常にです ページングの効率的な実装。 SQLオプティマイザーは、最初のIDを非常に高速に見つけることができます。これをROWCOUNTの使用と組み合わせると、CPU効率と読み取り効率の両方を備えたアプローチが得られます。行数が多いテーブルの場合、一時テーブルまたはテーブル変数を使用して見たどのアプローチよりも確実に優れています。
注意:この例ではシーケンシャルID列を使用していますが、コードはページの並べ替えに適した任意の列で機能します。また、コードは列の値ではなく行の数を選択するため、使用されている列のシーケンスの区切りは結果に影響しません。
編集:一意でない可能性のある値(LastNameなど)を含む列で並べ替える場合は、2番目の列をOrder By句に追加して、並べ替え値を再度一意にします。
CREATE PROCEDURE dbo.PagingTest
(
@PageNumber int,
@PageSize int
)
AS
DECLARE @FirstId int, @FirstRow int
SET @FirstRow = ( (@PageNumber - 1) * @PageSize ) + 1
SET ROWCOUNT @FirstRow
-- Add check here to ensure that @FirstRow is not
-- greater than the number of rows in the table.
SELECT @FirstId = [Id]
FROM dbo.TestTable
ORDER BY [Id]
SET ROWCOUNT @PageSize
SELECT *
FROM dbo.TestTable
WHERE [Id] >= @FirstId
ORDER BY [Id]
SET ROWCOUNT 0
GO