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 の落とし穴の詳細な説明

推薦する

Dell R720 サーバーに Windows Server 2008 R2 をインストールする方法

注: この記事のすべての写真はインターネットから収集されたものであるため、DELL R720 サーバ...

Nginx で同じドメイン名を持つ複数のプロジェクトを構成する方法

Nginx を使用して同じドメイン名で複数のプロジェクトを構成するには、次の 2 つの方法があります...

MySQLの外部結合と内部結合クエリの違い

外部結合の構文は次のとおりです。フィールド名を選択FROM テーブル名 1 LEFT|RIGHT|F...

MySQL 5.7 のルートパスワードログイン問題の解決策

前回の記事でMySQLサービスが起動しない問題が解決したと分かった後、パスワードなしでrootユーザ...

dockercompose を使用して springboot-mysql-nginx アプリケーションをビルドする

前回の記事では、Docker を使用して、コンパイルされた jar パッケージをイメージに組み込む ...

AWSサーバーリソースを無料で使用する方法を教えます

AWS - Amazon のクラウド コンピューティング サービス プラットフォーム以前、AWS の...

DockerにRedisをインストールし、設定ファイルとして起動する詳細な説明

更新: 最近、サーバーがマイニング ウイルスによってハッキングされたことが判明しました。これは、おそ...

CentOS 6.4 で rpm を使用して MySQL をオフラインでインストールする

rpmインストールパッケージを使用してmysqlをオフラインでインストールします。参考までに準備:公...

Linux でのプロセスデーモン スーパーバイザーのインストール、構成、および使用

Supervisor は非常に優れたデーモン管理ツールです。自動起動、ログ出力、自動ログカットなど、...

Js クラスの構築と継承のケースの詳細な説明

JS のクラスの定義や継承は本当に多様なので、別のノートブックを開いて記録しておきます。意味オブジェ...

Dockerとイメージの操作方法

ミラーを探すDocker Hubのウェブサイトからイメージを検索できます。Docker Hubのウェ...

MySQL での and or クエリの優先度分析

これは見落とされがちな問題かもしれません。まず、次の点を明確にする必要があります。 MySQL では...

altとtitleの違いの詳しい説明

これら 2 つの属性はよく使用されますが、その違いはまとめられていません。それでは、その使い方をまと...

CSS3 フィルター属性の使い方の紹介

1. はじめにフロントエンドページのアニメーション効果を記述する場合、filter 属性は多かれ少な...

1 つの記事で Node.js の非同期プログラミングを学ぶ

目次 はじめに 同期 非同期とブロッキング JavaScript のノンブロッキング コールバック ...