目次
#方法 1: トリプル ループ
アイデア
コードの実装
クエリ結果と時間
方法 2: max を使用する (プライマリkey)
クエリの結果と時間
ホームページ データベース SQL SQLサーバーのページングメソッドとは何ですか?

SQLサーバーのページングメソッドとは何ですか?

Aug 06, 2021 am 09:22 AM

この記事では、SQL Server 2012 バージョンを使用した SQL Server のページング方法について説明します。以下では、pageIndex はページ数を表し、pageSize は 1 ページに含まれるレコードを表します。以下に具体的な例を示します。クエリ ページ 2 を設定し、各ページには 10 レコードが含まれます。

まず、SQL サーバーのページングと MySQL のページングの違いについて説明します。MySQL のページングは​​、limit (pageIndex-1) と pageSize を使用することで直接完了できます。ただし、SQL サーバーには、limit キーワードがありません。 、limit のようなもののみ。トップのキーワード。したがって、ページングは​​さらに面倒です。

私が知っている SQL サーバー ページングのタイプは 4 つだけです: トリプル ループ、max (主キー) の使用、row_number キーワードの使用、offset/fetch next キーワードの使用 (インターネット上で他の人のメソッドを収集して要約したもの)現時点ではこれら 4 つの方法のみが存在するはずです。他の方法はこの変形に基づいています)。

クエリ対象の Student テーブルの部分レコード

SQLサーバーのページングメソッドとは何ですか?

#方法 1: トリプル ループ

アイデア

最初最初の 20 ページを取得し、次に逆の順序で取得し、最初の 10 レコードを逆の順序で取得すると、ページングに必要なデータを取得できますが、順序が逆になります。その後、逆の順序で返すことも、停止することもできます。ソートし、ソートのためにフロントエンドに直接渡します。

このタイプと考えられる別のメソッドがあります。コードはここには載せません。最初に最初の 10 レコードをクエリし、次に使用するアイデアについてだけ説明します。 「not in」を選択してこれら 10 件のレコードを除外し、「Inquire」を実行します。

コードの実装

-- 设置执行时间开始,用来查看性能的
set statistics time on ;
-- 分页查询(通用型)
select * 
from (select top pageSize * 
from (select top (pageIndex*pageSize) * 
from student 
order by sNo asc ) -- 其中里面这层,必须指定按照升序排序,省略的话,查询出的结果是错误的。
as temp_sum_student 
order by sNo desc ) temp_order
order by sNo asc

-- 分页查询第2页,每页有10条记录
select * 
from (select top 10 * 
from (select top 20 * 
from student 
order by sNo asc ) -- 其中里面这层,必须指定按照升序排序,省略的话,查询出的结果是错误的。
as temp_sum_student 
order by sNo desc ) temp_order
order by sNo asc
;
ログイン後にコピー

クエリ結果と時間

SQLサーバーのページングメソッドとは何ですか?

SQLサーバーのページングメソッドとは何ですか?

方法 2: max を使用する (プライマリkey)

まず、最初の 11 行のレコードを先頭にし、次に max (id) を使用して最大の ID を取得し、このテーブルの最初の 10 レコードを再クエリします。ただし、条件を追加する必要があります。 id>max(id)。

コードの実装

set statistics time on;
-- 分页查询(通用型)
select top pageSize * 
from student 
where sNo>=
(select max(sNo) 
from (select top ((pageIndex-1)*pageSize+1) sNo
from student 
order by  sNo asc) temp_max_ids) 
order by sNo;


-- 分页查询第2页,每页有10条记录
select top 10 * 
from student 
where sNo>=
(select max(sNo) 
from (select top 11 sNo
from student 
order by  sNo asc) temp_max_ids) 
order by sNo;
ログイン後にコピー

クエリの結果と時間

SQLサーバーのページングメソッドとは何ですか?

SQLサーバーのページングメソッドとは何ですか?

##方法 3: row_number キーワードを使用する

row_number() over(order by id) 関数を直接使用して行数を計算し、対応する行番号を選択して返しますが、このキーワードは SQL Server 2005 以降でのみ使用できます。

SQL 実装

set statistics time on;
-- 分页查询(通用型)
select top pageSize * 
from (select row_number() 
over(order by sno asc) as rownumber,* 
from student) temp_row
where rownumber>((pageIndex-1)*pageSize);

set statistics time on;
-- 分页查询第2页,每页有10条记录
select top 10 * 
from (select row_number() 
over(order by sno asc) as rownumber,* 
from student) temp_row
where rownumber>10;
ログイン後にコピー

クエリ結果と時間

SQLサーバーのページングメソッドとは何ですか?

SQLサーバーのページングメソッドとは何ですか?

4 番目のメソッド: offset /fetch next (2012 バージョン以降でのみ利用可能)

コード実装

set statistics time on;
-- 分页查询(通用型)
select * from student
order by sno 
offset ((@pageIndex-1)*@pageSize) rows
fetch next @pageSize rows only;

-- 分页查询第2页,每页有10条记录
select * from student
order by sno  
offset 10 rows
fetch next 10 rows only ;
ログイン後にコピー

offset A 行、最初の A レコードを破棄、次の B 行のみをフェッチし、B データを後方に読み取ります。

結果と実行時間

SQLサーバーのページングメソッドとは何ですか?

SQLサーバーのページングメソッドとは何ですか?

カプセル化されたストアド プロシージャ

最後に、ページングをカプセル化しました。ストアド プロシージャは誰でも呼び出すことができるため、ページングを作成するときにこのストアド プロシージャを直接呼び出すことができます。

ページング ストアド プロシージャ

create procedure paging_procedure
(	@pageIndex int, -- 第几页
	@pageSize int  -- 每页包含的记录数
)
as
begin 
	select top (select @pageSize) *     -- 这里注意一下,不能直接把变量放在这里,要用select
	from (select row_number() over(order by sno) as rownumber,* 
			from student) temp_row 
	where rownumber>(@pageIndex-1)*@pageSize;
end

-- 到时候直接调用就可以了,执行如下的语句进行调用分页的存储过程
exec paging_procedure @pageIndex=2,@pageSize=10;
ログイン後にコピー
概要

上記 4 つのページング メソッドの実行時間によると、上記 4 つのページング メソッドのうち、2 番目と 3 番目のページング メソッドは、 3 番目と 4 番目の方法のパフォーマンスは似ていますが、最初の方法のパフォーマンスは非常に低いため、お勧めできません。また、このブログでは少量のデータをテストしており、大量のデータのページングは​​行っていないため、大量のデータをページングする必要がある場合にどちらの方法のパフォーマンスが優れているかは明らかではありません。ここでは 4 番目の方法をお勧めしますが、結局のところ、4 番目の方法は SQL Server 会社がアップグレードした後に導入された新しい方法なので、理論的にはパフォーマンスと可読性が向上するはずです。

関連する推奨事項: 「

mysql チュートリアル

以上がSQLサーバーのページングメソッドとは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

SQL(水平、垂直)のデータ分割のさまざまな種類は何ですか? SQL(水平、垂直)のデータ分割のさまざまな種類は何ですか? Mar 13, 2025 pm 02:01 PM

この記事では、パフォーマンスとスケーラビリティへの影響に焦点を当てたSQLでの水平および垂直データの分割について説明します。それは、それらを選択するための利点と考慮事項を比較します。

SQLで集計関数を使用してデータを要約するにはどうすればよいですか(Sum、Avg、Count、Min、Max)? SQLで集計関数を使用してデータを要約するにはどうすればよいですか(Sum、Avg、Count、Min、Max)? Mar 13, 2025 pm 01:50 PM

この記事では、SQLアグリゲート関数(SUM、AVG、Count、Min、Max)を使用してデータを要約し、使用と違いを詳述し、クエリでそれらを結合する方法について説明します。

動的SQLを使用することのセキュリティリスクは何ですか?また、それらを緩和するにはどうすればよいですか? 動的SQLを使用することのセキュリティリスクは何ですか?また、それらを緩和するにはどうすればよいですか? Mar 13, 2025 pm 01:59 PM

この記事では、SQLインジェクションに焦点を当てた動的SQLのセキュリティリスクについて説明し、パラメーター化されたクエリと入力検証の使用などの緩和戦略を提供します。

SQLのさまざまなトランザクション分離レベルは何ですか(コミットされていない読み取り、読み取り、繰り返し可能な読み取り、シリアル化可能)? SQLのさまざまなトランザクション分離レベルは何ですか(コミットされていない読み取り、読み取り、繰り返し可能な読み取り、シリアル化可能)? Mar 13, 2025 pm 01:56 PM

この記事では、SQLトランザクションの分離レベルについて説明します。データの一貫性とパフォーマンスへの影響を調べ、より高い分離により一貫性が高くなることがありますが、

SQLのトランザクションの酸性特性は何ですか? SQLのトランザクションの酸性特性は何ですか? Mar 13, 2025 pm 01:54 PM

この記事では、SQLトランザクションにおける酸性特性(原子性、一貫性、分離、耐久性)について説明します。これは、データの整合性と信頼性を維持するために重要です。

SQLを使用して、データプライバシー規制(GDPR、CCPA)に準拠するにはどうすればよいですか? SQLを使用して、データプライバシー規制(GDPR、CCPA)に準拠するにはどうすればよいですか? Mar 18, 2025 am 11:22 AM

記事では、GDPRおよびCCPAコンプライアンスにSQLを使用して、データの匿名化、アクセス要求、および時代遅れのデータの自動削除に焦点を当てています(159文字)について説明します。

SQLインジェクションなどの一般的な脆弱性に対してSQLデータベースを保護するにはどうすればよいですか? SQLインジェクションなどの一般的な脆弱性に対してSQLデータベースを保護するにはどうすればよいですか? Mar 18, 2025 am 11:18 AM

この記事では、SQLインジェクションなどの脆弱性に対してSQLデータベースを保護し、準備されたステートメント、入力検証、定期的な更新を強調しています。

パフォーマンスとスケーラビリティのためにSQLでデータパーティションを実装するにはどうすればよいですか? パフォーマンスとスケーラビリティのためにSQLでデータパーティションを実装するにはどうすればよいですか? Mar 18, 2025 am 11:14 AM

記事では、パフォーマンスとスケーラビリティを向上させるために、SQLでデータパーティションを実装すること、詳細な方法、ベストプラクティス、監視ツールについて説明します。

See all articles