MySQL の制限使用法とページングクエリステートメントのパフォーマンス分析の詳細な説明

MySQL の制限使用法とページングクエリステートメントのパフォーマンス分析の詳細な説明

使用制限

クエリ ステートメントを使用する場合、多くの場合、データの最初の数行または中間行を返す必要があります。このとき、何をすればよいでしょうか。心配しないでください。MySQL はすでにそのような機能を提供しています。

SELECT * FROM テーブル LIMIT [オフセット,] 行 | 行 OFFSET オフセット

LIMIT 句を使用すると、SELECT ステートメントで指定された数のレコードを返すように強制できます。 LIMIT は 1 つまたは 2 つの数値引数を受け入れます。引数は整数定数でなければなりません。 2 つの引数が指定された場合、最初の引数は返される最初の行の偏移量を指定し、2 番目の引数は返される行の最大数を指定します。初始記錄行的偏移量是0(而不是1) 。PostgreSQL との互換性のため、MySQL は LIMIT # OFFSET # という構文もサポートしています。

mysql> SELECT * FROM table LIMIT 5,10; // 6-15行目を取得

特定のオフセットからレコードセットの末尾までのすべての行を取得するには、2 番目のパラメータを -1 に指定します。

mysql> SELECT * FROM table LIMIT 95,-1; // 96行目から最後の行までを取得します。

引数が 1 つだけ指定されている場合は、返される行の最大数を示します。

mysql> SELECT * FROM table LIMIT 5; // 最初の5行を取得します

つまり、 LIMIT n LIMIT 0,nと同等です。

MySQL ページングクエリステートメントのパフォーマンス分析

MySql ページング SQL ステートメントを MSSQL の TOP 構文と比較すると、MySQL の LIMIT 構文の方がはるかにエレガントです。ページングに使用するのは当然です。

最も基本的なページング方法:

SELECT ... FROM ... WHERE ... ORDER BY ... LIMIT ...

小規模および中規模のデータ量の場合、このような SQL で十分です。注意すべき唯一のことは、インデックスが使用されていることを確認することです。たとえば、実際の SQL が次のステートメントに似ている場合は、category_id 列と id 列に複合インデックスを作成する方が適切です。

次のようにコードをコピーします

SELECT * FROM articles WHERE category_id = 123 ORDER BY id LIMIT 50, 10

サブクエリのページング方法:

データ量が増えるとページ数も増え、次の数ページの SQL は次のようになります。

次のようにコードをコピーします

SELECT * FROM articles WHERE category_id = 123 ORDER BY id LIMIT 10000, 10

簡単に言えば、ページ番号を大きくするほど、 LIMIT語句的偏移量就會越大,速度也會明顯變慢

この時点で、次のようにサブクエリを使用してページング効率を向上させることができます。

SELECT * FROM articles WHERE id >= 
(SELECT id FROM articles WHERE category_id = 123 ORDER BY id LIMIT 10000, 1) LIMIT 10

JOINページング方式

`content` から * を選択 t1 
JOIN (SELECT id FROM `content` ORDER BY id desc LIMIT ".($page-1)*$pagesize.", 1) AS t2 
WHERE t1.id <= t2.id ORDER BY t1.id desc LIMIT $pagesize;

私のテストによると、結合ページングとサブクエリ ページングの効率は基本的に同じレベルであり、消費時間も基本的に同じです。 SQL ステートメントの説明:

id select_type テーブルタイプ possible_keys key key_len ref 行数 追加
1 PRIMARY <derived2> システム NULL NULL NULL NULL 1 
1 PRIMARY t1 range PRIMARY PRIMARY 4 NULL 6264 whereの使用
2 DERIVEDコンテンツインデックス NULL PRIMARY 4 NULL 27085 インデックスの使用

なぜこのようなことが起こるのでしょうか?サブクエリはインデックスに対して実行され、通常のクエリはデータ ファイルに対して実行されるため、一般的に、インデックス ファイルはデータ ファイルよりもはるかに小さいため、操作がより効率的になります。

実際、同様の戦略パターンを使用してページングを処理できます。たとえば、ページ数が 100 未満の場合は、最も基本的なページング方法を使用します。ページ数が 100 を超える場合は、サブクエリ ページング方法を使用します。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • MySQL の制限クエリ文を最適化する 5 つの方法
  • MySQLクエリステートメントは、クエリされる行の数を制限するためにlimitを使用します。
  • MySQL クエリの最適化: 結合クエリのソート制限の概要 (結合、順序、制限ステートメント)
  • mysql ステートメントの最初の数レコード (制限)
  • 制限クエリステートメントのMySQL最適化方法
  • MySQL のクエリパフォーマンスに対する制限の影響
  • MySQLのLIMIT文について詳しく説明します

<<:  vite2.0 設定学習の詳しい説明(typescript 版)

>>:  Linux システムでデプロイメント プロジェクトを設定する方法

推薦する

DBeaver を MySQL バージョン 8 以降に接続し、起こりうる問題を解決する方法の詳細な説明

データベース MySQL バージョン 8.0.18 DBeaver.exeをダウンロードするダウンロ...

ブラインドの特殊効果を実現するネイティブJS

この記事では、ネイティブ JS で実装されたブラインドの特殊効果を紹介します。効果は次のとおりです。...

MySQLデータの同時更新を処理する方法

UPDATE はロックしますか?以下のような場合、SQL文はロックされますか? テーブル1を更新しま...

ウェブデザイン:大量の素材の正確な配置と使用

3回の暗記により、大量の資材の正確な場所と目的を記憶でき、その使いやすさが向上します。 これは単なる...

YUMを使用してdockerをインストールする方法

次の図に示すように: Centos 7.0以上であれば問題ありません。現在のシステム カーネル バー...

MySQL ページングパフォーマンスの調査

一般的なページング方法: 1. エスカレーター方式エスカレーター方式では通常、前のページ/次のページ...

HTML における要素の水平および垂直中央揃えに関する議論

ページをデザインするときには、ログイン ウィンドウを中央に配置するなど、DIV を中央に配置し、ペー...

MySQL データ型 DECIMAL の詳細な分析

序文:金額の保存など、小数点数を保存し、精度要件がある場合、通常は DECIMAL フィールド タイ...

Linux インストール Redis 実装プロセスとエラー解決

今日、redis をインストールしたところ、今までになかったいくつかのエラーが発生しました。ここで記...

MySQL の遅いクエリ操作の例の分析 [有効化、テスト、確認など]

この記事では、MySQL のスロー クエリ操作について例を挙げて説明します。ご参考までに、詳細は以下...

jsはショッピングサイトの虫眼鏡機能を実現します

この記事では、ショッピングサイトの虫眼鏡機能を実現するためのjsの具体的なコードを紹介します。具体的...

JavaScriptは、マウスが通過したときにドロップダウンボックスを表示するように実装します。

この記事では、マウスがドロップダウンボックスの上を通過するときにドロップダウンボックスを表示するため...

Docker ベースの Jenkins のデプロイに関する詳細なチュートリアル

このドキュメントを作成した当時は2019年12月頃で、er2.200が最新バージョンでした。 1.画...

Vue は Axios リクエスト フロントエンドのクロスドメイン問題をどのように解決するのか

目次序文1. クロスドメインの問題はなぜ発生するのでしょうか? 2. 解決策クロスオリジンリソース共...

NodeサイトのForever+nginx導入方法例

私は最近、最も安い Tencent クラウド サーバーを購入しました。これは主に、Web テクノロジ...