効率的なMySQLページングの詳細な説明

効率的なMySQLページングの詳細な説明

序文

通常、大量のデータを扱う MySQL クエリには「ページング」戦略が採用されます。ただし、ページを後の位置に移動すると、MySQL は破棄する必要のあるデータをスキャンするのに多くの時間を費やすため、クエリは非常に遅くなります。

基本的なページングテクニック

通常、効率的なページングを実現するには、クエリ内の WHERE 条件列とソート列に結合インデックスを適用する必要があります。
たとえば、インデックス (a, b, c) を作成すると、次のクエリでインデックスを使用できるようになり、クエリの効率が向上します。

1. フィールドの並べ替え

注文する 
a,b で順序付け
a、b、c で​​順序付け 
ORDER BY a DESC、b DESC、c DESC 

2. フィルタリングと並べ替え

a = const ORDER BY b, c の場合 
a = const かつ b = const の場合、c で ORDER BY する 
a = const ORDER BY b, c の場合 
a = const かつ b > const の場合、b, c で ORDER BY する 

3. 次のクエリは上記のインデックスを使用できません

ORDER BY a ASC, b DESC, c DESC // ソート方向が一貫していません WHERE g = const ORDER BY b, c // フィールド g はインデックスの一部ではありません WHERE a = const ORDER BY c // フィールド b は使用されていません 
WHERE a = const ORDER BY a, d // フィールド d はインデックスの一部ではありません

大量のデータのページめくりの問題を解決

1. LIMIT M,NのクエリをLIMIT Nに変更します。
たとえば、LIMIT 10000,20 の場合、MySQL は最初の 10,000 行を読み取ってから次の 20 行を取得する必要があり、これは非常に非効率的です。LIMIT N を使用すると、各ページの最初または最後のレコードの ID でフィルタリングし、降順と昇順を使用して前/次のページの結果セットを取得できます。
2. ユーザーが閲覧できるページ数を制限します。実際の製品使用では、ユーザーが 10,000 番目の検索結果を気にすることはほとんどありません。
3.遅延連想法を使う
カバーリング インデックスを使用してクエリを実行し、必要な主キーを返し、返された主キーを元のテーブルに関連付けて必要な行を取得することで、Mysql がスキャンして破棄する必要がある行の数を減らすことができます。

例:
インデックス (性別、評価) を使用したクエリ:

mysql> SELECT <cols> FROM profiles INNER JOIN (
-> SELECT <主キー列> FROM プロファイル
-> WHERE x.sex='M' ORDER BY 評価 LIMIT 100000, 10
-> ) AS x USING(<主キーの列>);

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • MySQL ページングの原理と効率的な MySQL ページング クエリ ステートメント
  • MySQL 百万レベルのページング最適化 (MySQL 千万レベルの高速ページング)
  • MySQL 制限ページング最適化方法の共有
  • 3 つのデータベース (Oracle、MySQL、SqlServer) のページング クエリの例
  • php+mysql ページングコードの詳細な説明
  • mysql+php ページングクラス (テスト済み)
  • MySQL ページング最適化分析
  • Mysqlの制限を最適化し、100万から1000万までの高速ページングの複合インデックスを参照し、軽量フレームワークに適用します。
  • PHP で SELECT ステートメントを使用して MySQL ページング クエリを実装する方法
  • MySQL のページングクエリの 2 つのソリューションの比較

<<:  CentOS7 ファイアウォールとオープンポートの簡単な使い方の簡単な紹介

>>:  JSはカード配布アニメーションを実現します

推薦する

VMware 15.5 バージョンのインストール Windows_Server_2008_R2 システム チュートリアル図

1. VMware 15.5から新しい仮想マシンを作成する1. VMware を開き、ホームページで...

Vue のスロットスコープの詳細な理解(初心者向け)

Baidu には slot-scope に関する記事が既にたくさんありますが、以前よく学習しておら...

ドロップダウンメニューを表示または非表示にするJavaScript

この記事では、ドロップダウンメニューを表示および非表示にするJavaScriptの具体的なコードを参...

MySql8.0以降のバージョンでROOTパスワードを正しく変更する方法

展開環境:インストールバージョン Red Hat Cent 7.0 MYSQL バージョン 8.0....

MySQLのMERGEストレージエンジンの詳細な説明

MERGE ストレージ エンジンは、MyISAM テーブルのグループを論理ユニットとして扱い、同時に...

Zabbixのカスタム監視項目とトリガーについて

目次1. 監視ポート関係の説明操作する2. 監視サービス関係の説明操作する3. テンプレートのインポ...

MySQL で乱数を生成し、文字列を連結する方法の例

この記事では、MySQL が乱数を生成し、文字列を連結する方法について例を使用して説明します。ご参考...

MacでDockerがホストマシンにpingできない問題を解決する

解決Docker for Macに付属するLinux仮想マシン(軽量ですが、ソケットファイルを使用し...

テーブルパーティションとパーティション分割とは何ですか?MySqlデータベースパーティションとテーブルパーティション分割方法

1. テーブルとパーティションを分割する必要があるのはなぜですか?日常の開発では、大きなテーブルに遭...

Nginx 構成検出サービスのステータスを実装する方法

1. チェックステータスモジュールがインストールされているかどうかを確認します。 [root@loc...

VUEはG2チャートを使用した実装を導入します

目次G2チャートについて使用テンプレートで使用される完全なコード (棒グラフ)世界地図を追加するG2...

Docker Consul の概要とクラスター環境構築手順(グラフィカルな説明)

目次1. Dockerコンサルの概要2. nginxとconsulをベースにした自動検出と高可用性の...

deepin 2014 システムに MySQL データベースをインストールする方法

Deepin 2014 のダウンロードとインストールDeepin 2014 のダウンロードとインスト...

Nginx でアンチホットリンクを設定するための手順を完了する

必要:通常、サイト側は、ウェブサイト上の動画や写真が盗まれるのを防ぎたいと考えています。結局のところ...