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

推薦する

HTML要素のID属性とName属性の違い

今日、私は <a href="#13"></a> につい...

MySQL ベースのストレージエンジンとログの説明 (包括的な説明)

1.1 ストレージエンジンの概要 1.1.1 ファイルシステムストレージファイル システム: オペ...

友達やグループを見つけるためのJavaScriptのLayim

現在、layuiの関係者はlayim友達検索ページの構造とスタイルを提供していません。私は個人的に非...

ミニプログラムはミニプログラムクラウドを使用してWeChatの支払い機能を実装します

目次1. WeChat Payを開く1.1 アフィリエイト加盟店番号1.2 加盟店番号を追加する1....

10秒以内にMySQLデータベースに数百万件のレコードを挿入する実装

まず、次の質問について考えてみましょう。このような膨大な量のデータをデータベースに挿入するには、通常...

MySQL の group by に関する簡単な説明

目次1. はじめに2. ユーザーテーブルを準備する2.1 グループ化ルール2.2 グループの使用2....

JavaScript 関数型プログラミングの基礎

目次1. はじめに2. 関数型プログラミングとは何ですか? 3. 純粋関数(関数型プログラミングの基...

よくある MySQL 設計エラーをご存知ですか?

インターネットの発達により、バスを待ったり地下鉄に乗ったりする時間など、断片的な時間を活用して、いつ...

Vue で SuperMap を使用する練習

目次序文関連資料Vue プロジェクトが 2 次元ハイパーグラフを導入ハイパーグラフ 2D ケース引用...

実践的な経験を共有するためのコードチェックツールstylelintの紹介

目次序文文章1. stylelintをインストールする2. 設定ファイル3. stylelintを使...

CSSプリコンパイル言語とその違いの詳細な説明

1. 何ですか マークアップ言語として、CSSは比較的シンプルな構文とユーザーに対する要件が低いが、...

VueのTodoListケースの詳しい説明

<テンプレート> <div id="ルート"> <...

Linux ipcsコマンドの使用

1. コマンドの紹介ipcs コマンドは、Linux のプロセス間通信機能の状態を報告するために使用...

vue3 統合 API における vue2 の $refs の代替方法についての簡単な説明

vue2 プロジェクト開発の経験があれば、$refs に精通しているでしょう。 vue3 の急激なア...

CSS3 における構造擬似クラスセレクターと擬似要素セレクターの使い方の詳細な説明

構造擬似クラスセレクタの紹介構造擬似クラスセレクターは、いくつかの特殊効果を処理するために使用されま...