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のルートパスワードをリセットする最も簡単な方法

私の MySQL バージョンは MYSQL V5.7.9 です。古いバージョンを使用してください: ...

Idea の起動速度を改善し、Tomcat ログの文字化けを解決する方法

目次序文アイデアの起動速度Tomcat ログが文字化けしている序文Idea を再インストールしたので...

VMware 12 での Ubuntu 16.04 インストール チュートリアル

この記事では、VMware 12でのUbuntu 16.04のインストールチュートリアルを参考までに...

docker を使用して influxdb と mongo をデプロイするための一般的なコマンド

Docker ベースのデータベースをデプロイするsudo docker pull influxdb ...

Vue が 4 レベルのナビゲーションと検証コードを実装する方法の例

効果: まず5つのVueインターフェースを作成する1.home.vueページ <テンプレート&...

MySQL 時間統計方法の概要

データベースの統計を行う場合、多くの場合、年、月、日に基づいてデータを収集し、echart を使用し...

MySQL の一般的なログの概要

序文: MySQL システムには、さまざまな種類のログが存在します。さまざまなログにはそれぞれ独自の...

Ubuntu 基本チュートリアル: apt-get コマンド

序文apt-get コマンドは、Ubuntu システムのパッケージ管理ツールです。パッケージのインス...

HTML ul 順序なしテーブルのアプリケーションネスト

順序なしリストのアプリケーションネストコードをコピーコードは次のとおりです。 <!DOCTYP...

Reactフックとzarmコンポーネントライブラリ構成に基づいてh5フォームページを開発するためのサンプルコード

最近、React Hooks を zarm コンポーネント ライブラリと組み合わせて使用​​し、js...

インデックススキャンを使用したMySQLソート

目次sakilaをインストールするインデックススキャンソートテーブル構造インデックススキャンをソート...

SSHトンネルを使用してMySQLサーバーに接続する方法

序文場合によっては、データベースのイントラネット アドレスしか知らず、イントラネット経由で接続できな...

適応レイアウトの処理について(フロートとマージンネガティブマージンを使用)

適応型レイアウトは、実際のアプリケーションでますます一般的になっています。今日は、主にフローティング...

Nginx プロセス管理とリロードの原則の詳細な説明

プロセス構造図Nginx はマルチプロセス構造です。マルチプロセス構造は、次のような Nginx の...

CSS3 における擬似クラスの一般的な使用法の詳細な説明

before/after 疑似クラスは、要素内に 2 つの追加タグを挿入するのと同じです。最も適した...