より大量のデータと異なる場所を含むページを比較しました。
テーブルの作成:
CREATE TABLE [TestTable] ( [ID] [int] IDENTITY (1, 1) NOT NULL , [FirstName] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL , [LastName] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL , [Country] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL , [Note] [nvarchar] (2000) COLLATE Chinese_PRC_CI_AS NULL ) ON [PRIMARY] GO
データを挿入: (100 万)
SET IDENTITY_INSERT TestTable ON declare @i int set @i=1 while @i<=1000000 begin insert into TestTable([id], FirstName, LastName, Country,Note) values(@i, 'FirstName_XXX','LastName_XXX','Country_XXX','Note_XXX') set @i=@i+1 end SET IDENTITY_INSERT TestTable OFF
ページネーションの解決策 1: (ページネーションには Not In と SELECT TOP を使用します)
文形式:
rreeeページング ソリューション 2: (次より大きい ID と SELECT TOP ページングを使用)
SELECT TOP 页大小 * FROM TestTable WHERE (ID NOT IN (SELECT TOP 页大小*页数 id FROM 表 ORDER BY id)) ORDER BY ID
ページング ソリューション 3: (SQL カーソル ストアド プロシージャ ページングの使用)
SELECT TOP 页大小 * FROM TestTable WHERE (ID > (SELECT MAX(id) FROM (SELECT TOP 页大小*页数 id FROM 表 ORDER BY id) AS T)) ORDER BY ID
テスト結果:
テストはすべて 1 ページに 10 項目あります。3 つの数値は、3 つのソリューションが結果を生成するまでにかかる時間を表します。単位は秒です。 ページ 2: 18、10、29
500 ページ: 12、8、21
ページ 50000: 16、18、22
ページ 500000: 24、16、22
このテストの主な目的は、大量のデータのさまざまな部分のページめくりの効率をテストすることです。直線的な結果になるはずだと思っていましたが、変化が奇妙であることがわかりました。数回テストした結果、エラーは 1 ~ 2 秒以内に収まりました。SQL Server はさまざまな位置に応じてページめくりも最適化されていると推定されます。クエリ分析を確認したところ、主なコストは依然として order by であり、これが主キーでない場合、または文字列である場合は、おそらく速度が低下します。
他に忙しいため、これ以上のテストは行われていません。興味のある友人は、100,000 項目、インデックスなし、文字列コンテンツを使用してさまざまなテストを続けることができます。結果を忘れずに教えてください。
以上が3 つのページング方法の効率性の簡単なテストの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。