MySQL InnoDB MRR 最適化ガイド

MySQL InnoDB MRR 最適化ガイド

序文

MRR は Multi-Range Read の略で、ランダム ディスク アクセスを削減し、ランダム アクセスをより順次的なアクセスに変換することを目的としています。 range/ref/eq_ref タイプのクエリに適用可能です。

実施原則:

1. セカンダリ インデックスを検索した後、クラスター化インデックスで取得したプライマリ キーに基づいて必要なデータを検索します。

2. セカンダリ インデックスの順序はクラスター化インデックスの順序と必ずしも一致しないため、セカンダリ インデックス検索によって取得される主キーの順序は不確実です。

3. MRR がない場合、クラスター化インデックスの検索中にデータ ページが順序どおりに読み込まれない可能性があり、これは機械式ハード ドライブにとって非常に不利です。

4. MRR最適化手法:

  • 見つかったセカンダリ インデックス キー値をキャッシュに格納します。
  • キャッシュ内のキー値を主キーで並べ替えます。
  • 実際のデータ ファイルには、並べ替えられた主キーの非クラスター化インデックスに基づいてアクセスされます。

5. オプティマイザーが MRR を使用すると、実行プランの Extra 列に「Using MRR」と表示されます。

6. クエリで使用されるセカンダリ インデックスの順序が結果セットの順序と一致している場合は、MRR を使用した後に結果セットをソートする必要があります。

MRR を使用すると、バッファー プール内のページが置き換えられる回数を減らし、キー値クエリ操作をバッチ処理することもできます。

MRR が有効になっているかどうかを確認するには、コマンドselect @@optimizer_switch;を使用できます。

index_merge=オン、index_merge_union=オン、index_merge_sort_union=オン、index_merge_intersection=オン、engine_condition_pushdown=オン、index_condition_pushdown=オン、mrr=オフ、mrr_cost_based=オン、block_nested_loop=オン、batched_key_access=オフ、materialization=オン、semijoin=オン、loosescan=オン、firstmatch=オン、duplicateweedout=オン、subquery_materialization_cost_based=オン、use_index_extensions=オン、condition_fanout_filter=オン、derived_merge=オン、use_invisible_indexes=オフ、skip_scan=オン

mrr_cost_based=on MRR をコストベースで使用するかどうかを示します。

MRR をオンまたはオフにするには、 set @@optimizer_switch='mrr=on/off';コマンドを使用します。

select @@read_rnd_buffer_size ;このパラメータは、キー値のバッファ サイズを制御するために使用されます。デフォルト値は 256K です。パラメータ値より大きい場合、エグゼキュータはキャッシュされたデータを主キーに従ってソートし、主キーを通じて行データを取得します。

要約する

以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。

以下もご興味があるかもしれません:
  • MySQL 学習のまとめ: InnoDB ストレージ エンジンのアーキテクチャ設計の予備的な理解
  • MySQL InnoDB row_id 境界オーバーフロー検証方法の手順
  • MySQL InnoDB のトランザクション特性を確保するにはどうすればよいですか?
  • MySQL 起動エラー InnoDB: ロックできません/ibdata1 エラー
  • MySQL InnoDB のロック機構の詳細な説明
  • MySQL (InnoDB) がデッドロックを処理する方法の詳細な説明
  • MySQL 学習 (VII): Innodb ストレージ エンジン インデックスの実装原理の詳細説明
  • MySQL slow_log テーブルを InnoDB エンジンに変更することはできません。詳細な説明
  • MySQL ストレージエンジン InnoDB の設定と使用方法の説明
  • MySQL Innodb ストレージ構造と Null 値の保存の詳細な説明

<<:  Reactイベントバインディングの詳細な説明

>>:  Centos7 Zabbix3.4 メールアラーム設定(メール内容がxx.bin添付ファイルになる問題の解決)

推薦する

MySql 5.7.17 winx64 のインストールと設定に関する詳細なチュートリアル

1. ソフトウェアをダウンロードする1. MySQL の公式サイトにアクセスし、Oracle アカウ...

Vue ボタンの権限制御の導入

目次1. 手順1. ボタンの権限を定義する2. ストアを定義する3. 権限指示を作成する4. パーミ...

Linux で MySQL データベースのインポートおよびエクスポート コマンドを実装する方法

1. mysqldump コマンドを使用してデータベースをエクスポートします (このコマンドのパスで...

MySQL IN ステートメントにおける低速クエリの効率を最適化する手法の例

表の構造は以下のとおりです。記事数は690件のみです。 記事テーブル article(id,titl...

純粋なCSS3で実装されたネオンライト効果

達成される効果は次のとおりです。 マウスがボタン内に移動すると、ネオンライトのような効果が生成され、...

CentOS 7.0 (mysql-5.7.21) で複数の MySQL インスタンスを起動する方法

設定手順Linux システム: CentOS-7.0 MySQL バージョン: 5.7.21 Lin...

MySQL マスタースレーブレプリケーションの実践の詳細説明 - ログポイントに基づくレプリケーション

ログポイントベースのレプリケーション1. マスターデータベースとスレーブデータベースに専用のレプリケ...

この記事では、Vueのフロントエンドページングとバックエンドページングを実装する方法を説明します。

目次1: フロントエンドの手書きページング(データ量が少ない場合) 2: バックエンドのページング、...

Vueベースのビデオプレーヤーの実装例

既存のビデオ プレーヤーがニーズを満たせない場合は、ビデオを自分でカプセル化する必要があります。ビデ...

DockerでJavaプログラムを起動する方法

シンプルなSpring Boot Webプロジェクトを作成するアイデア ツールを使用して、Sprin...

Vueインスタンスで$refsを使用する際の注意点

開発の過程では、インスタンスの vm.$refs(this.$refs) を使用して、ref で登録...

nginx を使用して同じドメイン名で複数の Vue プロジェクトをデプロイし、リバース プロキシを使用する方法

効果現在、プロジェクトは2つ(project1、project2)あり、nginxに付属するinde...

Docker MQTT のインストールと使用のチュートリアル

MQTT の紹介MQTT (Message Queuing Telemetry Transport)...

MySQL の自動増分主キーに関する詳細な説明

目次特徴保存戦略自己増加の決定自動増分値の変更実行プロセス問題点自動増分ロックロック戦略バッチ挿入の...

MySQL シリーズ 11 ログ

チュートリアルシリーズMySQL シリーズ: MySQL リレーショナル データベースの基本概念My...