MySQL Limit はセグメント内のデータベース データをクエリでき、主にページングで使用されます。最近作成されたウェブサイトのデータは数千に上りますが、いくつかの小さな最適化は大きな役割を果たしません。開発は極限まで行われ、完璧なパフォーマンスを追求する必要があります。以下に、パフォーマンスを最適化するためのいくつかの制限方法を示します。 制限構文: SELECT * FROM テーブル LIMIT [オフセット,] 行 | 行 OFFSET オフセット LIMIT 句を使用すると、SELECT ステートメントで指定された数のレコードを返すように強制できます。 LIMIT は 1 つまたは 2 つの数値引数を受け入れます。引数は整数定数でなければなりません。 2 つの引数が指定された場合、最初の引数は返される最初の行のオフセットを指定し、2 番目の引数は返される行の最大数を指定します。最初のレコード行のオフセットは 0 (1 ではない) です。 サポート制限 # オフセット # 構文: mysql> SELECT * FROM table LIMIT 5,10; // 6-15行目を取得 //特定のオフセットからレコードセットの最後までのすべての行を取得するには、2番目のパラメータを-1に指定します。 mysql> SELECT * FROM table LIMIT 95,-1; // 96行目から最後の行までを取得 //パラメータが1つだけ指定されている場合は、返される行の最大数を示します。つまり、LIMIT nはLIMIT 0,nと同じです。 mysql> SELECT * FROM table LIMIT 5; // 最初の5行を取得します limit n,m は、n 番目のレコードから始まる m 個のレコードを選択することを意味します。ほとんどの開発者は、Web における従来のページング問題を解決するために、このタイプのステートメントを使用することを好みます。データセットが小さい場合、これは大きな問題ではありません。非常に大量のデータを持つ可能性のあるフォーラムなどのアプリケーションの場合、制限 n,m の効率は非常に低くなります。毎回データを選択する必要があるためです。最初の 5 つのレコードだけを選択する場合は、非常に簡単で便利ですが、100 万件のレコードの場合、800,000 行目から 5 つのレコードを選択すると、この位置までレコードをスキャンする必要があります。 つまり、limit 10000,20 は、条件を満たす 10020 行をスキャンし、最初の 10000 行を破棄し、最後の 20 行を返すことを意味します。問題はここにあります。limit 100000,100 を使用すると、100100 行をスキャンする必要があります。同時実行性の高いアプリケーションでは、各クエリで 100,000 行以上をスキャンする必要があり、パフォーマンスは間違いなく大幅に低下します。 異なるデータ量によるデータ読み取り効率の比較: 1. オフセットが小さい場合: テーブル制限5,10から*を選択 複数回実行した後、時間は0.0004〜0.0005の間のままでした。 テーブルから*を選択、ID >=( テーブルからIDを選択 ID制限10,1で並べ替え ) 制限 10 複数回実行した後も、時間は 0.0005 ~ 0.0006 の間のままでした。したがって、オフセットが小さい場合は、limit を直接使用する方が効率的です。 2. オフセットデータが大きい場合: テーブル制限10000,10から*を選択 複数回実行した後も、時間は 0.0187 秒前後のままでした。 テーブルから*を選択、ID>=( テーブルからIDを選択 ID制限10000,1で並べ替え ) 制限 10 複数回実行した後も、時間は 0.061 秒程度で、以前の約 1/3 のままでした。したがって、オフセットが大きい場合、後者を使用すると効率が低下します。これは id をインデックスとして使用した結果です。 id がデータ テーブルの主キーとして使用されている場合: テーブル制限 10000,10 から ID を選択 クエリには約 0.04 秒かかります。これは、id 主キーがインデックスとして使用されるためです。 パフォーマンスの最適化を制限する: ID>=( のサイクロペディアから * を選択 最大(ID)を選択( サイクロペディアからIDを選択 ID制限90001で並べ替え ) tmpとして ) 制限 100; ID>=( のサイクロペディアから * を選択 最大(ID)を選択( サイクロペディアからIDを選択 ID制限で並べ替え 90000,1 ) tmpとして ) 制限 100; 2 番目の文は、90,000 件のレコードから最後の 100 件のレコードを取得するときに高速になります。最初の文では、まず最初の 90,001 件のレコードを取得し、最大の ID 値を開始識別子として取得し、それを使用して次の 100 件のレコードをすばやく検索します。一方、2 番目の文では、最後のレコードのみを取得し、その ID 値を開始識別子として取得し、次の 100 件のレコードを検索します。 2 番目の文は次のように短縮できます。 ID>=( のサイクロペディアから * を選択 IDを選択( サイクロペディアからIDを選択 ID制限で並べ替え 90000,1 ) tmpとして ) 制限 100; 最大演算は省略され、ID は通常は増分されます。 ページングデータのパフォーマンス最適化: 1. 大量のデータを含むデータ テーブルの場合、主キーとインデックス フィールドを作成してインデックス テーブルを作成し、インデックス テーブルを通じて対応する主キーをクエリし、次に主キーを通じて大量のデータを含むデータ テーブルをクエリすることができます。 2. where 条件があり、インデックスを使用して limit を使用する場合は、インデックスを設計し、where を最初に配置し、limit に使用する主キーを 2 番目に配置し、主キーのみを選択する必要があります。これにより、読書速度が向上します 3. 使用方法: まず、where 条件を通じて対応する主キー値を取得し、次に主キー値を使用して対応するフィールド値を照会します。 カーソルを使用したページング: MySQL で最高のクエリ パフォーマンスを実現するために、ページング クエリをカーソル クエリ モードに変更しました。 テーブルから * を選択し、 id > last_id の制限が 20 で、 reply_id ASC で並べ替えます。 上記の last_id はこのページの最後のレコードの ID であるため、「次のページ」クエリを実現でき、同様に「前のページ」クエリも実現できます。 カーソル ページングは、連続データにのみ適しており、ページ ジャンプはサポートされていません。自動増分 ID を作成するか、データ テーブルに順序付けされたフィールドを追加することができます。大量のデータがあるプロジェクトの場合、ページ ジャンプはあまり役に立ちません。検索の目的を達成するには、フィルター条件を使用できます。 要約する 以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。これについてもっと知りたい場合は、次のリンクをご覧ください。 以下もご興味があるかもしれません:
|
<<: vue3 で vue-router を使用するための完全な手順
>>: Dockerはホスト間のネットワーク通信を実現するためにMacvlanを導入する
1. 背景Sysbench は、システムのハードウェア パフォーマンスをテストできるストレス テスト...
TensorFlow をディープラーニングに使うとビデオメモリ不足がよく起こるので、GPU 使用状況...
目次1. はじめに2. 環境とツール3. Dockerをインストールし、リモート接続を構成する4. ...
VMwareaのインストールプロセスは説明しませんが、主にwin7イメージをロードする方法を説明しま...
目次実際の戦闘プロセスまずは主なコマンドと詳細を一つずつ説明しましょう起動が成功したかどうかを確認す...
序文データ型変換とは何ですか?フォームまたはプロンプトを使用して取得されるデフォルトのデータ型は文字...
目次1. binlogの紹介2. Binlog関連のパラメータ3. バイナリログの内容を分析するIV...
Black Duck の 2017 年のオープンソース調査では、回答者の 77% がオープンソース...
1. コマンドの紹介cal (カレンダー) コマンドは、現在の日付または指定された日付のグレゴリオ暦...
この記事では、オブジェクト パラメータをインスタンス化して MySQL でデータをクエリする方法を紹...
腹筋コマンドの原則Apache の ab コマンドは、マルチスレッドの同時リクエストをシミュレートし...
Web ページ ボックス モデルには 2 種類あります。 1: 標準 W3C ボックス モデル。2:...
問題の説明最近のバックグラウンドサービスでは、特定の命令の要求データをディスクに保存する新しい機能が...
目次1. Dockerfile とは何ですか? 2. Dockerfile構築プロセスの分析3. D...
CSS変数の知識を使って、追加したコードとコメントを直接投稿します <!DOCTYPE htm...