ホームページ  >  記事  >  データベース  >  3 つのページング方法の効率性の簡単なテスト

3 つのページング方法の効率性の簡単なテスト

巴扎黑
巴扎黑オリジナル
2017-05-01 10:40:071318ブラウズ

より大量のデータと異なる場所を含むページを比較しました。

テーブルの作成:

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, &#39;FirstName_XXX&#39;,&#39;LastName_XXX&#39;,&#39;Country_XXX&#39;,&#39;Note_XXX&#39;)
    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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。