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

推薦する

Unicodeの一般的な記号

Unicode は、世界中のすべてのテキストと記号に対応できる国際組織によって開発された文字エンコー...

CentOS8 yum/dnfで国内ソースを設定する方法

CentOS 8 ではソフトウェア パッケージのインストール プログラムが変更され、yum 構成方法...

WeChatミニプログラムページとコンポーネント間の情報伝達と機能呼び出し

今回は、私自身の開発経験を踏まえて、以下の観点で関連内容を解説します。ページからコンポーネントにデー...

vue-router からのフロントエンドルーティングの 2 つの実装

目次モードパラメータハッシュ履歴ハッシュ履歴.push()ハッシュ履歴.replace()アドレスバ...

CSS3 を使用して円形スクロール プログレス バー アニメーションを作成する例

テーマ今日は、CSS3 を使用して円形スクロール プログレス バー アニメーションを作成する方法を説...

HTML における Div と table の違い (あらゆる側面から詳細に説明)

1: 速度と読み込み方法の違いdivとtableの違いは速度ではなく、読み込み方法です。速度はネット...

mysql の find_in_set 関数の基本的な使い方

序文これは私が最近見つけた新しい機能です。プロジェクトでの私の使用シナリオは次のとおりです。アプリケ...

Ubuntu で VIM を C++ 開発エディタとして設定する

1. 設定ファイルをユーザー環境にコピーし、新しい.vimフォルダを作成し、バンドルサブフォルダを作...

M1 チップに MySQL 8.0 データベースをインストールする方法 (画像とテキスト)

1. ダウンロードまず、MySQLの国内ミラーをお勧めします。特に速いわけではありませんが、それで...

ネイティブ JavaScript でシンプルな Gobang ゲームを実装する

この記事では、JavaScriptで簡単なGobangゲームを実装するための具体的なコードを参考まで...

MySQL インデックス使用状況監視スキル (収集する価値あり!)

概要リレーショナル データベースでは、インデックスは、データベース テーブル内の 1 つ以上の列の値...

MySQL 8.0 をインストールした後、初めてログインするときにパスワードを変更する問題を解決する

MySQL 8.0.16で初回ログイン時のパスワードを変更する方法を紹介します。 MySQLデータベ...

Linux に nodejs 環境とパス構成をインストールするための詳細な手順

Linux に Node.js をインストールする方法は 2 つあります。1 つは簡単で、解凍して使...

Windows 10 に付属する仮想マシンのネットワークを設定するための詳細な手順 (グラフィック チュートリアル)

1. サーバー ホストをクリックし、右側の操作リストで [仮想スイッチ管理] をクリックして、仮想...