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 に接続するプロセスの詳細な説明

ブログ    

推薦する

あるテーブルからバッチデータをクエリし、それを別のテーブルに挿入する MySQL の完全な例

事前に言っておくNodejs はデータベースを非同期操作として読み取るため、データベースがデータを読...

Linux ssh サーバーの構成コード例

LinuxホストにSSHサーバーをインストールするには、次のターミナルコマンドを使用します: sud...

CSS の clip-path プロパティの使用方法の詳細な説明

クリップパスの使用ポリゴン値は複数の座標点で構成されます。最初の値は x 方向、2 番目の値は y ...

tomcat+nginx を使用してマルチアプリケーション デプロイメントを実装するためのサンプル コード

目次マルチアプリケーションの展開1-Tomcat 構成1.1- プロジェクト構成1.2-サービス構成...

Vueのアイデアを使ってストレージをカプセル化する方法

目次背景関数目的アイデアの源成し遂げるセット得るプロパティの削除拡張機能を禁止するもっている要約する...

jQuery エディタ プラグイン tinyMCE の使い方

簡略化されたファイル サイズを変更し、サンプルをダウンロードします。ファイルをローカル コンピュータ...

JavaScriptのプリコンパイルを見てみましょう(概要)

JSランニング三部作js実行コードは3つのステップに分かれています構文解析プリコンパイル解釈Jav...

HTML における if 判断の使用

Django Web開発の過程で、HTMLを書く際にバックエンドから同じ名前のリスト変数が渡されるが...

優れたウェブワイヤーフレーム設計・制作ツール13選を紹介

プロジェクトの作業を開始するときは、ワイヤーフレームを使用してアイデアをスケッチすることが重要です。...

iframeをカプセル化するvueコンポーネントを開発する

目次1. コンポーネントの紹介2. コンポーネントの内部構造とロジック1. コード組織構造2. マッ...

GDBデバッグMySQL実戦ソースコードコンパイルとインストール

ソースコードをダウンロード git クローン https://github.com/mysql/my...

HTML入力ボックスの最適化により、ユーザーエクスペリエンスと使いやすさが向上します。

ユーザーエクスペリエンスと使いやすさを向上させるために、入力ボックスなど、Web ページでユーザーが...

MySQL 8の新機能ウィンドウ関数の役割

MySQL 8.0 の新機能は次のとおりです。 Unicode 9.0 をすぐに完全にサポートウィン...

js 属性オブジェクトの hasOwnProperty メソッドの使用

オブジェクトの hasOwnProperty() メソッドは、オブジェクトに特定の独自の (継承され...