MySQL ページング中にオフセットが大きすぎる場合の SQL 最適化の経験の共有

MySQL ページング中にオフセットが大きすぎる場合の SQL 最適化の経験の共有

問題を見つける

コンテンツをリストで表示すると、リスト内のコンテンツの数は多いかもしれませんが、ユーザーが一度に表示されるインターフェースのサイズは限られているため、必然的にページングの問題が発生します。 1 つのインターフェースにすべてのコンテンツを表示することは不可能です。 バックエンドから一度に取得するデータが多すぎると、バックエンドに余分な負荷がかかります。

通常、ページング クエリには次のステートメントが使用されます。

選択
*
テーブルから
条件1 = 0の場合
条件2 = 0
条件3 = -1
条件4 = -1
ID昇順で並べ替え
制限 2000 オフセット 50000

オフセットが特に大きい場合、このステートメントの実行効率は大幅に低下し、オフセットが増加するにつれて効率は低下します。

理由は次のとおりです。

MySQL はオフセット行をスキップせず、オフセット + N 行を取得し、前のオフセット行を返して N 行を返します。オフセットが特に大きく、単一のデータも大きい場合、クエリを実行するたびに取得する必要があるデータが多くなり、速度が低下します。

最適化計画:

選択
*
テーブルから
参加する
(テーブルからIDを選択
条件1 = 0の場合
条件2 = 0
条件3 = -1
条件4 = -1
ID昇順で並べ替え
制限 2000 オフセット 50000)
tmp として (id) を使用

または

テーブルaからa.*を選択します。 
(テーブルからIDを選択
条件1 = 0の場合
条件2 = 0
条件3 = -1
条件4 = -1
ID昇順で並べ替え
制限 2000 オフセット 50000) b 
ここで、a.id = b.id

まず主キーリストを取得し、次に主キーで対象データを照会します。オフセットが大きい場合でも、すべてのフィールドデータではなく、多くの主キーが取得されます。相対的に効率が大幅に向上します。

要約する

上記はこの記事の全内容です。この記事の内容が皆さんの勉強や仕事に少しでもお役に立てれば幸いです。ご質問があれば、メッセージを残してコミュニケーションしてください。123WORDPRESS.COM をご愛顧いただき、ありがとうございます。

以下もご興味があるかもしれません:
  • MySQLの制限を使用して大規模なページングの問題を解決する方法
  • ビッグデータの場合のMySQLのシンプルなページング最適化方法
  • MySQL 百万レベルのページング最適化 (MySQL 千万レベルの高速ページング)
  • MYSQL ページング制限速度の最適化方法が遅すぎる
  • MySQL 制限ページング最適化方法の共有
  • MySQL 百万レベルのデータページングクエリ最適化ソリューション
  • Mysqlの制限を最適化し、100万から1000万までの高速ページングの複合インデックスを参照し、軽量フレームワークに適用します。
  • MySQL ページング最適化分析
  • 数千万のデータを扱うMySQLのページングクエリのパフォーマンスを最適化する
  • MySQL 最適化チュートリアル: 大規模なページングクエリ

<<:  Reactの親コンポーネントと子コンポーネント間のデータ転送の詳細な説明

>>:  nginx 設定チュートリアルにおける add_header の落とし穴の詳細な説明

推薦する

2時間のDocker入門チュートリアル

目次1.0 はじめに2.0 Dockerのインストール3.0基本的なDockerコマンド4.0 Do...

アイデアをDockerに接続してワンクリックでデプロイする方法

1. docker設定ファイルを変更し、ポート2375を開きます。 [root@s162 docke...

SWFObjectを使用すると、HTMLにFlashを挿入する際のブラウザ互換性の問題を完全に解決できます。

一緒に学びましょう1. 伝統的な方法コードをコピーコードは次のとおりです。 <object c...

HTMLとは何ですか?

HTML 開発の歴史: HTML は英語で Hypertext Marked Language の...

リバースプロキシ設定を実装するためのユニバーサルnginxインターフェース

1. プロキシサーバーとは何ですか?プロキシ サーバーは、クライアントが要求を送信すると、それを直接...

Dockerfileの指示と基本構造の説明

Dockerfile を使用すると、ユーザーはカスタム イメージを作成できます。基本構造Docker...

Tomcatアーキテクチャの原則をアーキテクチャ設計に分析する

目次1. 学習目標1.1. Tomcatアーキテクチャの設計と原則をマスターして社内スキルを向上させ...

Vueのデータ応答性原則の詳細な説明

この記事は主に、Vue のレスポンシブ ソース コードを理解していない、または触れたことがない人向け...

iframe の src を about:blank に設定した後の詳細

iframe の src を 'about:blank' に設定した後、"...

Ubuntu 18.04 システムでの Redis および phpredis 拡張機能のインストールと設定の詳細な説明

この記事では、Ubuntu 18.04 に Redis と phpredis 拡張機能をインストール...

JavaScript で配列遅延評価ライブラリを実装する方法

目次概要達成方法具体的な実装評価関数の終了を決定する生成関数の範囲変換関数マップフィルター割り込み機...

CPU、マシンモデル、メモリなどの情報を表示するLinuxシステム

システムメンテナンス中は、いつでも CPU 使用率を確認し、対応する情報に基づいてシステムの状態を分...

MySQLマスタースレーブ遅延現象と原理の詳細な分析

1. 現象早朝、オンライン テーブルにインデックスが追加されました。テーブル内のデータ量が大きすぎた...

MySQL における一般的なランキングの問題をいくつかまとめます

序文:一部のアプリケーション シナリオでは、成績や年齢によるランキングなど、ランキングの問題が発生す...

子要素の margin-top によって親要素が移動する問題の解決方法

問題の説明今日、ページ スタイルを変更していたときに、子要素にmargin-top設定したのに、子要...