MySQL インデックスの最適化: ページング探索の詳細な紹介

MySQL インデックスの最適化: ページング探索の詳細な紹介

MySQL インデックス最適化ページングの調査

テーブル構造

テーブル「デモ」を作成します(
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) 文字セット utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT 'Name',
  `age` int(11) NOT NULL デフォルト '0' コメント '年齢',
  `position` varchar(50) 文字セット utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT 'Position',
  `card_num` varchar(255) 文字セット utf8 COLLATE utf8_general_ci デフォルト NULL コメント '作業カード番号',
  主キー (`id`)、
  キー `index_union` (`name`,`age`,`position`)
) ENGINE=InnoDB AUTO_INCREMENT=450003 デフォルトCHARSET=utf8;

450003 件のレコード

ページング実行ステータスの制限

MySQL インデックス最適化ページング探索_サブノード

select * from demo limit 90000,10; のように、テーブルの戻り値を考慮すると、MySQL は単にテーブル全体をスキャンすることを選択します。

MySQL は 90000 行目から直接 10 項目をカウントするのではなく、最初のリーフ ノードからカウントを開始して 90010 行をカウントします。

ケース1

MySQL インデックスの最適化: ページングの調査_Paging_02

上図では、ID が継続的に増加する場合、主キーを使用して id=90000 以降のデータをフィルター処理できます。主キーインデックスは B+ ツリー構造なので順序付けられています。

MySQL インデックス最適化ページング探索_データ_03

ケース2

MySQL インデックス最適化ページング探索_データ_04

まず名前で並べ替え、次に行 90000 から始まる 10 行を検索します。名前はインデックスですが、選択した列は index_union インデックス ツリーに保存されません。

したがって、テーブルに戻る必要があるため、MySQL は主キー インデックス ツリーのリーフ ノードを直接スキャンすることを選択し、最初に 400,000 を超えるデータを名前に従ってソートし、次に 90,000 行 + 10 行を計算します。

最適化方法:最も時間のかかるソートとテーブルを返す問題を解決するためにサブクエリを使用します。ジョイントインデックスツリーは主キーIDを格納します。名前で並べ替えると、左端の列のソートが決定され、他の2つの列、年齢と位置のソートは実際には

ソートが完了し、インデックス ツリーは Extra フィールドを介したソートにも使用できます。

最も外側のクエリは主キーによって関連付けられているため、ほとんど無視できます。 10+10 id は主キーなので、一時テーブル内の 10 個のレコードを直接スキャンできます。

MySQL インデックスの最適化: ページングの調査_Paging_05

これで、MySQL インデックスの最適化とページング探索の詳細な紹介に関するこの記事は終了です。より関連性の高い MySQL ページング探索コンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • この記事では、インデックスなしでMySQL結合を最適化する方法を説明します。
  • MySQL のインデックスの原理とクエリの最適化の詳細な説明
  • MySQL データの最適化 - 多層インデックス
  • MySQLのインデックス選択と最適化の詳細な説明
  • MySQL パフォーマンス最適化インデックス プッシュダウン
  • インデックスを使用して数千万のデータを持つ MySQL のクエリ速度を最適化する
  • MySQLの最適化とインデックス分析

<<:  Node.js のフロントエンドとバックエンドのインタラクションによるユーザーログインの実装の実践

>>:  純粋な CSS カスタム複数行省略記号の問題 (原理から実装まで)

推薦する

JavaScript 中断要求に対するいくつかの解決策の詳細な説明

目次1 約束呼び出しチェーンを中断する約束を破る中止メソッドのラッピング - Axios の Can...

Nginx10m+の高並列カーネル最適化に関する簡単な説明

高い同時実行性とは何ですか?デフォルトの Linux カーネル パラメータは、最も一般的なシナリオ向...

Windows 上の Docker にさまざまなソフトウェアをインストールする詳細なプロセス

1. MySQLをインストールする # docker で mysql をダウンロード docker ...

JavaScript におけるイベント委譲メカニズムと深いコピーと浅いコピーの簡単な分析

目次1. イベントの委任イベントバブリングイベントキャプチャイベントの泡立ちの昇華考える2. 深いコ...

あるテーブルからバッチデータをクエリし、それを別のテーブルに挿入する MySQL の完全な例

事前に言っておくNodejs はデータベースを非同期操作として読み取るため、データベースがデータを読...

Nginx で HTTPS 証明書を構成する詳細なプロセス

1. HttpとHttpsの違いHTTP: インターネットで最も広く使用されているネットワーク プロ...

mysql-connector-java.jar パッケージのダウンロード プロセスの詳細な説明

mysql-connector-java.jar パッケージのチュートリアルをダウンロードします: ...

CentOS 7.x dockerはoverlay2ストレージ方式を使用する

/etc/docker/daemon.json を編集し、以下を追加します。 { "ストレ...

新しく作成された MySQL ユーザーの % には localhost が含まれていますか?

通常の説明%はどのクライアントでも接続できることを意味しますlocalhostはローカルコンピュータ...

Reactでwindow.print()を使用した際にページが応答しなくなる問題の解決記録について

目次1. 問題の背景: 2. 問題の原因: 3. 問題解決:要約: 1. 問題の背景: window...

Linux (Centos7) に mysql8.0.18 をインストールするチュートリアル図

1 インストールリソースパッケージmysql-8.0.18-1.el7.x86_64.rpm-bun...

Mysql systemctl start mysqld によって報告されるエラーの解決策

エラーメッセージ:制御プロセスがエラー コードで終了したため、mysqld.service のジョブ...

JS での filter() 配列フィルターの使用

目次1. はじめに2. 方法の紹介3. 使用例要約する1. はじめに配列フィルターは、フロントエンド...

MySQLカスタム関数の簡単な使用例

この記事では、例を使用して MySQL カスタム関数の使用方法を説明します。ご参考までに、詳細は以下...

一般的な MySQL ストレージ エンジンとパラメータ設定およびチューニングの紹介

MyISAM、MySQLでよく使われるストレージエンジン特性: 1. 同時実行性とロックレベル2. ...