MySQL インデックス プッシュダウン (ICP) の簡単な理解と例

MySQL インデックス プッシュダウン (ICP) の簡単な理解と例

序文

Index Condition Pushdown (ICP) は、MySQL 5.6 の新機能です。テーブルクエリの数を減らし、検索効率を向上させることができます。

MySQL アーキテクチャ

インデックス プッシュダウンを理解するには、まず MySQL のアーキテクチャを理解する必要があります。

上記の画像は公式 MySQL ドキュメントからの抜粋です。

MySQL は通常、上から下に向かって次のレイヤーに分かれています。

  • MySQL サービス レイヤー: NoSQL および SQL インターフェイス、クエリ パーサー、オプティマイザー、キャッシュ、バッファー、その他のコンポーネントが含まれます。
  • ストレージ エンジン レイヤー: トランザクションやインデックスなどのさまざまなストレージ エンジン関連の機能を実装するさまざまなプラグイン テーブル ストレージ エンジン。
  • ファイル システム層: 物理ファイルの読み取りと書き込み。

MySQL サービス レイヤーは、SQL 構文の解析、トリガー、ビュー、組み込み関数、binlog、実行プランの生成などを担当し、ストレージ エンジン レイヤーを呼び出してデータの保存と取得を実行します。 「インデックス プッシュ ダウン」の「ダウン」は、実際には、上位層 (サービス層) が担当するタスクの一部が、処理のために下位層 (ストレージ エンジン) に引き渡されることを意味します。

インデックスプッシュダウンの例

ユーザー テーブルのデータと構造が次のとおりであると仮定します。

id誕生日名前
1 18 01-01ユーザー1
2 19 03-01ユーザー2
3 20 03-01ユーザー3
4 21 03-01ユーザー4
5 22 05-01ユーザー5
6 18 06-01ユーザー6
7 24 01-01ユーザー7

結合インデックス (年齢、誕生日) を作成し、年齢が 20 歳を超え、誕生日が 03-01 であるユーザーをクエリします。

年齢が20歳を超え、誕生日が「03-01」であるユーザーから*を選択します。

年齢フィールドは範囲クエリを使用するため、最左プレフィックスの原則に従って、この場合、範囲クエリに使用できるのは年齢フィールドのみであり、インデックス内の誕生日フィールドは使用できません。実行プランを表示するには、explain を使用します。

+------+-------------+-------+-------+---------------+--------------+--------+------+------+-----------------------+
| id | select_type | テーブル | タイプ | possible_keys | key | key_len | ref | 行 | 追加 |
+------+-------------+-------+-------+---------------+--------------+--------+------+------+-----------------------+
| 1 | SIMPLE | ユーザー | 範囲 | age_birthday | age_birthday | 4 | NULL | 3 | インデックス条件を使用 |
+------+-------------+-------+-------+---------------+--------------+--------+------+------+-----------------------+

age_birthday インデックスが使用されているにもかかわらず、インデックスの長さ key_len が 4 しかないことがわかります。これは、結合インデックスの age フィールドのみが有効であることを意味します (age フィールドは int 型であり、4 バイトを占めるため)。最後に、「Extra」列の「Using index」条件は、このクエリがインデックス プッシュダウン最適化を使用することを示します。

インデックス プッシュダウンなしで次の手順を実行します。

  • ストレージエンジンは、インデックスに従って年齢が20を超えるユーザーID(4、5、7)を検索します。
  • ストレージ エンジンは、テーブルから ID が (4,5,7) の 3 つのレコードを取得し、サービス レイヤーに返します。
  • サービス レイヤーは、birthday="03-01" 条件を満たさないレコードをフィルター処理し、最終的に id=4 のレコードの行をクエリ結果として返します。

インデックス プッシュダウン最適化が有効になっている場合、実行手順は次のようになります。

  1. ストレージ エンジンは、インデックスに従って age>20 のユーザー ID を検索し、インデックスの birthday フィールドを使用して birthday="03-01" 条件を満たさないレコードをフィルター処理し、最終的に id=4 を取得します。
  2. ストレージ エンジンは、テーブルから id=4 のレコードを取得し、それをサービス レイヤーに返します。
  3. サービス レイヤーは、birthday="03-01" 条件を満たさないレコードをフィルター処理し、最終的に id=4 のレコードの行をクエリ結果として返します。

インデックス プッシュダウンを有効にすると、where 条件は MySQL サービス レイヤーからストレージ エンジン レイヤーに移動されて実行されます。利点は、ストレージ エンジンが ID に基づいてテーブルからデータを読み取る頻度が少なくなることです。上記の例では、インデックス プッシュダウンがない場合、テーブルをさらに 2 回クエリする必要があります。さらに、テーブル クエリは個別の IO になる可能性が高く、場合によってはデータベースのパフォーマンスが大幅に向上する可能性があります。

要約する

これで、MySQL Index Pushdown (ICP) の簡単な理解と例に関するこの記事は終了です。MySQL Index Pushdown (ICP) に関するより関連性の高いコンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQL インデックス プッシュダウンを 5 分で理解する
  • MySQL Index Pushdown (ICP) とは何かを理解するための記事
  • MySQL インデックス プッシュダウンを 5 分で学ぶ
  • MySQLはインデックスプッシュダウンを数秒で理解するのに役立ちます

<<:  CSS3入力ボックスの実装コードはGoogleログインのアニメーション効果に似ています

>>:  docker pruneコマンドは、あまり使用されないデータを定期的にクリーンアップするために使用できます。

推薦する

Centos7 での python3 のインストールとアンインストールに関するチュートリアル

1. Python 3をインストールする1. 依存パッケージをインストールしますyum instal...

JavaScriptにおけるこのポインティング問題の詳細な説明

序文JS の this ポインターは、初心者にとって常に頭痛の種でした。今日は、これが地面に落ちたと...

CentOS8.0 で FTP サーバーをインストールして設定する方法

CentOS8.0-1905 のリリース後、FTP サーバーを CentOS の新しいバージョンに移...

JS で配列をループする 4 つの方法のまとめ

この記事では、配列を走査する 4 つの方法を比較してまとめます。 for ループ: for (let...

mysql の not equal to null と equal to null の書き方の詳細説明

1. テーブル構造 2. 表データ 3. クエリのteacher_nameフィールドは空にすることは...

CSS3はNESゲームコンソールのサンプルコードを実装します

成果を達成する実装コードhtml <input type="radio" ...

ECMAScript のイテレータの詳細な説明

目次序文以前のバージョンイテレータパターンイテレータファクトリ関数イテレータプロトコル最後に序文多く...

Vue の基本リスナーの詳細な説明

目次Vueのリスナーとは何かリスナーの使い方vue リスナーウォッチVue リスナー - ディープリ...

MySQL 5.7.13 winx64 のインストールと設定方法のグラフィック チュートリアル (win10)

この記事では、参考までにMySQL 5.7.13 winx64のインストールと設定方法のグラフィック...

Vue3 ベースのフルスクリーン ドラッグ アップロード コンポーネント

この記事は主に、みんなで共有できるVue3ベースのフルスクリーンドラッグアップロードコンポーネントを...

JavaScript ESの新機能letとconstキーワードに基づく

目次1. letキーワード1.1 基本的な使い方1.2 変動昇進はない1.3 一時的なデッドゾーン1...

Linux のごみ箱メカニズムの実装プロセスと使用方法の詳細な説明

序文: Linux システムでの rm は元に戻せません。コマンドの設計自体に問題はありません。問題...

MySQLクラスタのDockerデプロイメントの実装

シングルノードデータベースの欠点大規模なインターネットプログラムはユーザーベースが大きいため、アーキ...

ftp は SSH 経由で Linux にリモート接続します

まず Linux に ssh をインストールします。例として Centos を使用します。ポータル:...

jQueryは広告を上下にスクロールする効果を実現します

この記事では、広告を上下にスクロールする効果を実現するためのjQueryの具体的なコードを参考までに...