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 システムでデプロイメント プロジェクトを設定する方法

推薦する

アバターと国旗の統合を実現する1行のCSSコード

今日は建国記念日で、誰もが祖国の誕生日をお祝いしようとしています。毎年この時期になると、WeChat...

SQL グループ化により重複を削除し、他のフィールドで並べ替える

必要:あるフィールドの同一項目を結合し、別の時間フィールドで並べ替えます。例:初めに テーブルから都...

HTML 5 スタイルシートのリセット

この CSS リセットは、Eric Meyers の CSS リセットに基づいて変更されており、特に...

htmlはハイパーリンク付きの新しいウィンドウを開き、ウィンドウのプロパティを制御できます。

1. HTMLハイパーリンクによって開かれるウィンドウのサイズコードをコピーコードは次のとおりです...

Mysql WorkBench のインストールと設定のグラフィックチュートリアル

この記事では、Mysql WorkBenchのインストールと設定のグラフィックチュートリアルを参考ま...

CSS3は、大きな円のドット分布と回転効果を実現するためにtransform-originを使用します。

まず、transform-origin 属性を使用する必要があります。transform 属性は必ず...

純粋な CSS3+DIV で小さな三角形の境界線効果を実現するためのサンプル コード

具体的なコードは次のとおりです。 HTMLコードは次のとおりです <div class=&qu...

WEB2.0の片手ルール

<br />前回のCSSに関する記事は、多くの人にあまり理解されませんでした。そのため、...

SQL Server データベース エラー 5123 の解決方法

なぜなら、SQL Server 2005 に基づくデータベース チュートリアルがあり、そこで使用され...

Linux デスクトップ用に Openbox を設定する方法 (推奨)

この記事は、「24 Days of Linux Desktop」の特別シリーズの一部です。 Open...

Linux suse11でルートパスワードを忘れた場合に変更する方法の簡単な分析

SUSE Linuxでルートパスワードを忘れた場合の解決方法SUSE (Linux オペレーティング...

NginxはGzipアルゴリズムを使用してメッセージを圧縮します

HTTP圧縮とは場合によっては、比較的大きなメッセージ データがクライアントとサーバー間で送信され、...

ES6分解課題の原理と応用

目次配列分割代入オブジェクトの分解代入分割割り当ての適用変数の値の交換関数から複数の値を返すマップ構...

HTML テーブルタグチュートリアル (17): テーブルタイトルの垂直配置属性 VALIGN

表のキャプションは表の上または下に配置でき、プロパティで調整できます。デフォルトのテーブル タイトル...