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

推薦する

LNMP と phpMyAdmin を Docker にデプロイする方法

環境準備:複数のコンテナに基づいてホストに lnmp をデプロイします。 nginx サービス: 1...

MySQL サービスとデータベース管理

目次1. サービスの開始と停止の手順1.1 Windows での MySQL 5.7 の公式 MSI...

JavaScriptはフォームデータの非同期送信を実装します

この記事では、フォームデータの非同期送信を実装するためのJavaScriptの具体的なコードを参考ま...

MySQL DML ステートメントの概要

DML 操作とは、データベース内のテーブル レコードに対する操作を指し、主にテーブル レコードの挿入...

Vueはシンプルなコメント機能を実装します

この記事では、Vueの簡単なコメント機能を実装するための具体的なコードを参考までに共有します。具体的...

トランザクション分離レベルのMySQLケース分析

目次1. 理論シリアル化可能繰り返し読み取りコミットされた読み取りコミットされていない読み取り2. ...

Zabbix動的実行監視収集スクリプトの実装原理

Zabbix カスタム スクリプトを使用して監視データを収集する場合、通常、次の問題が発生します。サ...

非常に実用的なTomcat起動スクリプトの実装方法

序文セキュリティ上の理由から、会社が Linux サーバーへのすべてのログインにセキュリティ制限を課...

Vueで複数の添付ファイルをアップロードする実装例

目次序文コアコードコードのファイル表示部分序文この記事では主に、Vue プロジェクトでの添付ファイル...

MySQL 8.0.13 zipパッケージのインストール方法について

MySQL 8.0.13 にはデフォルトでデータ フォルダがあります。このフォルダを削除する必要があ...

MySQL への接続時に発生する 1449 および 1045 例外の解決方法

MySQL への接続時に発生する 1449 および 1045 例外の解決方法 mysql 1449:...

MySQLメモリストレージエンジンに関する知識

メモリストレージエンジンに関する知識ポイントメモリ ストレージ エンジンは日常業務ではほとんど使用さ...

WIN10 に複数のデータベースがインストールされている場合にコンピュータの速度低下を防ぐ方法

必要なときにサービスを有効にし、必要がないときは無効にします。データベース サービスを管理する方法:...

Linux デュアル ネットワーク カード バインディング スクリプト メソッドの例

Linux の操作と構成作業では、デュアル ネットワーク カードのバインディングがよく使用されます。...

HTMLベースの複数画像アップロードのプレビュー機能を実装

最近、Web ページに複数の画像をアップロードするためのスクリプトを作成しました。これは非常に実用的...