SQLサーバーのページングメソッドとは何ですか?
この記事では、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 テーブルの部分レコード
#方法 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 ;
クエリ結果と時間
方法 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;
クエリの結果と時間
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;
ログイン後にコピー
クエリ結果と時間
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;
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 データを後方に読み取ります。 結果と実行時間
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 ;
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;
mysql チュートリアル 」
以上がSQLサーバーのページングメソッドとは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









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

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

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

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

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

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

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

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