MySQL における SQL ページングクエリのいくつかの実装方法と利点と欠点

MySQL における SQL ページングクエリのいくつかの実装方法と利点と欠点

【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 ソート条件

利点: 汎用性が高い。
デメリット: データ量が多い場合、ページが逆方向にめくられ、NOT IN のデータが多すぎるとパフォーマンスに影響します。
該当: データ量が多くない。

方法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 よりも利点があります。
デメリット: データ量が少ない場合は NOT IN ほど効果的ではありません。
適用対象: ほとんどのページング クエリ要件。

上記は私の個人的な意見です。パフォーマンスの比較はオンライン情報と個人的な判断によるもので、綿密な実験は行っていません。不適切な点があればご指摘ください。

これで、MySQL でのページング クエリのいくつかの実装方法と利点と欠点に関するこの記事は終了です。MySQL でのページング クエリ方法の詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • MySQL 最適化チュートリアル: 大規模なページングクエリ
  • 数百万のデータボリュームに対する MySQL ページングクエリ方法とその最適化の提案
  • MySQL 百万レベルのデータページングクエリ最適化ソリューション
  • 数千万のデータを扱うMySQLのページングクエリのパフォーマンスを最適化する
  • Mysql 制限ページングクエリ最適化の詳細な説明
  • PHP ページングクエリ MySQL 結果の base64 処理方法の例
  • MySQL の制限使用法とページングクエリステートメントのパフォーマンス分析の詳細な説明
  • MySQL ページングクエリ最適化テクニック

<<:  JavaScript は、シンプルな虫眼鏡の最も完全なコード分析を実装します (ES5)

>>:  Centos サーバーに MySql をデプロイし、Navicat に接続するプロセスの詳細な説明

推薦する

Dockerの基礎

序文: Docker はオープンソースのアプリケーション コンテナ エンジンであり、開発者はこれを使...

MySQLでSQLクエリ文がどのように実行されるかを分析する

目次1. MySQL論理アーキテクチャの概要2. コネクタクエリキャッシュ4. パーサー5. オプテ...

Typescriptの基本構文13個を共有する

目次1. Tsとは何か2. 基本的な文法1. プリミティブデータ型を宣言する2. オブジェクト型を宣...

ラベルタグの使用時に発生する問題の分析と解決策

最近何かをするときにラベル タグを使用しました。以前はラベル タグをほとんど使用していなかったため、...

MySQLが間違ったインデックスを選択する理由と解決策

MySQL では、テーブルに複数のインデックスを指定できますが、ステートメントの実行時に、使用するイ...

Javascript イベントキャプチャとバブリングメソッドの詳細な説明

目次1. イベント処理モデル1. イベントバブリング(1)3つのdiv要素にイベントをバインドする(...

TypeScript のユニオン型、交差型、型ガード

目次1. ユニオンタイプ2. クロスオーバータイプ3. 型保護3.1 カスタム型保護3.2 保護の種...

iframe を使用して Web ページに他の Web ページを埋め込む方法

iframe の使い方:コードをコピーコードは次のとおりです。 <DIV align=cent...

HTMLページ作成に関する私の経験の簡単な要約

Word of Mouth に入社して 3 ~ 4 か月が経ちました。仕事の中で一番の収穫は、ビジュ...

JavaScript のカンマ式が含まれている場合について

JavaScript の if ステートメントで英語のカンマ「,」が表示されることがあります。これは...

mysqldump を使用して MySQL データをバックアップする方法

1. mysqldump の紹介mysqldump は、MySQL に付属する論理バックアップ ツー...

CSS トップに戻る コード例

最近のウェブサイトのほとんどはページが長く、4 画面または 5 画面の長さのものもあれば、2 画面ま...

HTML ドラッグ アンド ドロップ機能の実装コード

Vueベースこの機能の核となるアイデアは、JavaScript コードを通じてページ上のノードの左余...

Element UI で自動サイズ調整テキストエリアの高さを設定する方法

Element UIのtextarea input自動サイズに設定すると、テキストボックスのデフォル...

MySQL ロックの知識ポイントのまとめ

ロックの概念①. 現実世界では、鍵は外の世界から身を隠したいときに使う道具です。 ②. コンピュータ...