検索
ホームページデータベースSQLSQLサーバーのページングメソッドとは何ですか?

この記事では、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 サイトの他の関連記事を参照してください。

声明
この記事はCSDNで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
データ分析のためのSQL:ビジネスインテリジェンスの高度な手法データ分析のためのSQL:ビジネスインテリジェンスの高度な手法Apr 14, 2025 am 12:02 AM

SQLの高度なクエリスキルには、複雑なデータ分析要件を処理できるサブクエリ、ウィンドウ関数、CTE、複雑な結合が含まれます。 1)サブクエリは、各部門で最高の給与を持つ従業員を見つけるために使用されます。 2)ウィンドウ関数とCTEを使用して、従業員の給与成長傾向を分析します。 3)パフォーマンス最適化戦略には、インデックスの最適化、クエリの書き換え、パーティションテーブルの使用が含まれます。

MySQL:SQLの特定の実装MySQL:SQLの特定の実装Apr 13, 2025 am 12:02 AM

MySQLは、標準のSQL関数と拡張機能を提供するオープンソースリレーショナルデータベース管理システムです。 1)MySQLは、制限句の作成、挿入、更新、削除、拡張などの標準のSQL操作をサポートしています。 2)InnodbやMyisamなどのストレージエンジンを使用しています。これらは、さまざまなシナリオに適しています。 3)ユーザーは、テーブルの作成、データの挿入、ストアドプロシージャの使用など、高度な機能を介してMySQLを効率的に使用できます。

SQL:すべての人がデータ管理にアクセスできるようにしますSQL:すべての人がデータ管理にアクセスできるようにしますApr 12, 2025 am 12:14 AM

sqlmakesdatamanagemagementisibletoallbyproviding asimpleyetpowerfultoolset andmanagingdatabases.1)itworks withersortifyify what what what what what what what what whatysortsopecifyifyを許可します

SQLインデックス戦略:クエリパフォーマンスを桁違いに改善するSQLインデックス戦略:クエリパフォーマンスを桁違いに改善するApr 11, 2025 am 12:04 AM

SQLインデックスは、巧妙なデザインを通じてクエリパフォーマンスを大幅に改善できます。 1. Bツリー、ハッシュ、フルテキストインデックスなどの適切なインデックスタイプを選択します。 2。複合インデックスを使用して、マルチフィールドクエリを最適化します。 3.オーバーインデックスを避けて、データメンテナンスのオーバーヘッドを減らします。 4.不要なインデックスの再構築や削除など、定期的にインデックスを維持します。

SQLで制約を削除する方法SQLで制約を削除する方法Apr 10, 2025 pm 12:21 PM

SQLの制約を削除するには、次の手順を実行します。削除する制約名を特定します。 ALTER TABLEステートメントを使用してください:Table Table Name Drop Constraint Constraint Nameを変更します。削除を確認します。

SQLトリガーを設定する方法SQLトリガーを設定する方法Apr 10, 2025 pm 12:18 PM

SQLトリガーは、特定のイベントが指定されたテーブルで実行されたときに特定のアクションを自動的に実行するデータベースオブジェクトです。 SQLトリガーをセットアップするには、トリガー名、テーブル名、イベントタイプ、トリガーコードを含むCreate Triggerステートメントを使用できます。トリガーコードは、ASキーワードを使用して定義され、SQLまたはPL/SQLステートメントまたはブロックが含まれます。トリガー条件を指定することにより、Where句を使用して、トリガーの実行範囲を制限できます。トリガー操作は、インサート、更新、または削除ステートメントを使用してトリガーコードで実行できます。新しいキーワードと古いキーワードを使用して、トリガーコードの影響を受けるキーワードを参照できます。

SQLクエリのインデックスを追加する方法SQLクエリのインデックスを追加する方法Apr 10, 2025 pm 12:15 PM

インデックス作成は、データ列を並べ替えてデータ検索を加速するデータ構造です。 SQLクエリにインデックスを追加する手順は次のとおりです。インデックス化する必要がある列を決定します。適切なインデックスタイプ(Bツリー、ハッシュ、またはビットマップ)を選択します。 Create Indexコマンドを使用して、インデックスを作成します。インデックスを定期的に再構築または再編成して、その効率を維持します。インデックスの追加の利点には、クエリパフォーマンスの改善、I/O操作の削減、最適化された並べ替えとフィルタリング、および並行性の改善が含まれます。クエリが特定の列を使用することが多い場合、ソートまたはグループ化する必要がある大量のデータを返し、大きい複数のテーブルまたはデータベーステーブルが含まれます。インデックスの追加を検討する必要があります。

SQLステートメントにIfelseの使用方法SQLステートメントにIfelseの使用方法Apr 10, 2025 pm 12:12 PM

Ifelseステートメントは、条件付き評価結果に基づいて異なる値を返す条件付きステートメントです。その構文構造は次のとおりです。if(条件)then return_value_if_condition_is_true elsen return_value_if_condition_is_false end if;。

See all articles

ホット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ヘンタイを無料で生成します。

ホットツール

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール