【SQL】SQLページングクエリの概要 開発プロセスではページングが必要になることがよくあります。今日はここでそれをまとめてみましょう。 簡単に言えば、ソースで制御する方法と、末端で制御する方法の 2 つの方法があります。ソース コントロールはページング ロジックを SQL レイヤーに配置します。クライアント コントロールはすべてのデータを一度に取得し、ページング ロジックを UI (GridView など) に配置します。当然のことながら、オンエンド制御は開発難易度が低く、小規模データに適していますが、データ量が増加するとパフォーマンスとIO消費が許容できなくなります。オンソース制御は、パフォーマンスと開発難易度の点でよりバランスが取れており、ほとんどのビジネスシナリオに適しています。さらに、客観的な条件(パフォーマンス要件、ソースとエンドのリソース使用量など)に基づいて、ソースとエンドの間にレイヤーを追加し、処理に特別なアルゴリズムとテクノロジーを使用することもできます。以下では主にソース、つまり SQL のページングについて説明します。 ページングの問題は、実際には、条件を満たす順序付けられたデータの山から、現在表示する必要がある部分を傍受することです。実際、MySql の LIMIT、Oracle の ROWNUM と ROW_NUMBER()、SqlServer の TOP と ROW_NUMBER() など、さまざまなデータベースにはページングの問題に対する組み込み戦略があります。これに基づいて、一連のページング メソッドを取得できます。 1. MySQL の LIMIT と Oracle の ROWNUM に基づいて、戻り値の範囲を直接制限できます (MySQL を例にとると、Oracle の ROWNUM を使用する場合はサブクエリを適用する必要があることに注意してください)。 方法1: 戻り値の範囲を直接制限する SELECT * FROM テーブル WHERE クエリ条件 ORDER BY ソート条件 LIMIT ((ページ番号 - 1) * ページ サイズ), ページ サイズ; 利点: 書き方がシンプル。 2. LIMIT (MySql)、ROWNUM (Oracle)、および TOP (SqlServer) に基づいて、返される行数を制限できるため、次の 2 つの一般的なメソッド セットを取得できます (SqlServer を例に挙げます)。 方法2: NOT IN SELECT TOP ページサイズ * FROM テーブル WHERE 主キー NOT IN ( SELECT TOP (ページ番号 - 1) * ページサイズ 主キー FROM テーブル WHERE クエリ条件 ORDER BY ソート条件) ORDER BY ソート条件 利点: 汎用性が高い。 方法3: MAX SELECT TOP ページ サイズ * FROM テーブル WHERE クエリ条件 AND ID > ( ISNULL(MAX(id),0) を選択 ( SELECT TOP ((ページ番号 - 1) * ページサイズ) id FROM table WHERE クエリ条件 ORDER BY id ) AS tempTable ) IDで並べ替え 利点: 特に ID が主キーである場合に高速です。 3. SqlServer と Oracle の ROW_NUMBER() に基づいて、返されるデータの行番号を取得できます。これに基づいて、戻り値の範囲を制限すると、次のメソッドが得られます (SqlServer を例に挙げます)。 方法4: ROW_NUMBER() SELECT TOP page_size * から ( SELECT TOP (ページ番号 * ページサイズ) ROW_NUMBER() OVER (ORDER BY ソート条件) AS RowNum, * FROM テーブル WHERE クエリ条件) AS tempTable WHERE RowNum BETWEEN (ページ番号 - 1) * ページサイズ + 1 AND ページ番号 * ページサイズ ORDER BY RowNum 利点: データ量が多い場合、NOT IN よりも利点があります。 上記は私の個人的な意見です。パフォーマンスの比較はオンライン情報と個人的な判断によるもので、綿密な実験は行っていません。不適切な点があればご指摘ください。 これで、MySQL でのページング クエリのいくつかの実装方法と利点と欠点に関するこの記事は終了です。MySQL でのページング クエリ方法の詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: JavaScript は、シンプルな虫眼鏡の最も完全なコード分析を実装します (ES5)
>>: Centos サーバーに MySql をデプロイし、Navicat に接続するプロセスの詳細な説明
序文: Docker はオープンソースのアプリケーション コンテナ エンジンであり、開発者はこれを使...
目次1. MySQL論理アーキテクチャの概要2. コネクタクエリキャッシュ4. パーサー5. オプテ...
目次1. Tsとは何か2. 基本的な文法1. プリミティブデータ型を宣言する2. オブジェクト型を宣...
最近何かをするときにラベル タグを使用しました。以前はラベル タグをほとんど使用していなかったため、...
MySQL では、テーブルに複数のインデックスを指定できますが、ステートメントの実行時に、使用するイ...
目次1. イベント処理モデル1. イベントバブリング(1)3つのdiv要素にイベントをバインドする(...
目次1. ユニオンタイプ2. クロスオーバータイプ3. 型保護3.1 カスタム型保護3.2 保護の種...
iframe の使い方:コードをコピーコードは次のとおりです。 <DIV align=cent...
Word of Mouth に入社して 3 ~ 4 か月が経ちました。仕事の中で一番の収穫は、ビジュ...
JavaScript の if ステートメントで英語のカンマ「,」が表示されることがあります。これは...
1. mysqldump の紹介mysqldump は、MySQL に付属する論理バックアップ ツー...
最近のウェブサイトのほとんどはページが長く、4 画面または 5 画面の長さのものもあれば、2 画面ま...
Vueベースこの機能の核となるアイデアは、JavaScript コードを通じてページ上のノードの左余...
Element UIのtextarea input自動サイズに設定すると、テキストボックスのデフォル...
ロックの概念①. 現実世界では、鍵は外の世界から身を隠したいときに使う道具です。 ②. コンピュータ...