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添付ファイルになる問題の解決)

推薦する

CSS3 引用のソースと出典をマークする方法

疫病のせいで家にこもりきりで、頭がおかしくなりそうなので、パソコンを起動して頭を働かせてみました。今...

mysql 複数テーブル接続削除関数の削除

単一のテーブルを削除する: tableName から columnName = value を削除し...

すべてのホストがmysqlにアクセスできるようにする方法

1. MySQLデータベースのユーザーテーブルのレコードのHostフィールド値を%に変更します。奇妙...

Tinymce リッチテキストを使用して Vue のツールバーボタンをカスタマイズする実践

目次tinymce、tinymce ts、tinymce-vue 宣言ファイルをインストールするパッ...

Zabbix による VMware Exsi ホストの監視のグラフィカルな手順

1. 仮想化 vcenter に入り、ブラウザでログインし (クライアントは設定する場所を見つけませ...

プロトタイプとプロトタイプチェーン プロトタイプとプロトタイプの詳細

目次1. プロトタイプ2. プロトタイプチェーン2.1 コンストラクタ2.2 電話をかける/申し込む...

divコンテナ内の背景色または画像は、サイズが大きくなるにつれて大きくなります。

コードをコピーコードは次のとおりです。高さ:自動 !重要;高さ:550px;最小高さ:550px; ...

MySQL と Golan 間の従来の分散トランザクションのための 7 つのソリューション

目次1. 基本理論1.1 取引1.2 分散トランザクション2. 分散トランザクションソリューション2...

MySQL で特定の日、月、または年のデータをクエリするためのコードの詳細な説明

今日 テーブル名から * を選択します。ここで、to_days(時間フィールド名) = to_day...

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

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

ブラウザでビデオプレーヤーを実装するための基本的な考え方とコード

目次序文ブラウザにおけるオーディオとビデオに関する知識のまとめビデオエンコーディング包装形態オーディ...

6秒でMySQLに100万件のレコードを挿入する方法を教えます

1. アイデアMySQL に 1,000,000 件のレコードを挿入するのにたった 6 秒しかかかり...

SpringBoot + Vue プロジェクトを Linux サーバーにデプロイするための詳細なチュートリアル

序文SpringBoot + Vueのフロントエンドとバックエンドを分離したプロジェクトをどのように...

MySQL 入門 - SQL 実行プロセス

目次1. プロセス2. コアアーキテクチャ2.1 サーバー層の基本コンポーネントの紹介3. ステート...

MySQL を使用した分散ロックの実装

導入分散システムでは、分散ロックは最も基本的なツール クラスです。たとえば、支払い機能を備えた 2 ...