序文Index Condition Pushdown (ICP) は、MySQL 5.6 の新機能です。テーブルクエリの数を減らし、検索効率を向上させることができます。 MySQL アーキテクチャインデックス プッシュダウンを理解するには、まず MySQL のアーキテクチャを理解する必要があります。 上記の画像は公式 MySQL ドキュメントからの抜粋です。 MySQL は通常、上から下に向かって次のレイヤーに分かれています。
MySQL サービス レイヤーは、SQL 構文の解析、トリガー、ビュー、組み込み関数、binlog、実行プランの生成などを担当し、ストレージ エンジン レイヤーを呼び出してデータの保存と取得を実行します。 「インデックス プッシュ ダウン」の「ダウン」は、実際には、上位層 (サービス層) が担当するタスクの一部が、処理のために下位層 (ストレージ エンジン) に引き渡されることを意味します。 インデックスプッシュダウンの例ユーザー テーブルのデータと構造が次のとおりであると仮定します。
結合インデックス (年齢、誕生日) を作成し、年齢が 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」条件は、このクエリがインデックス プッシュダウン最適化を使用することを示します。 インデックス プッシュダウンなしで次の手順を実行します。
インデックス プッシュダウン最適化が有効になっている場合、実行手順は次のようになります。
インデックス プッシュダウンを有効にすると、where 条件は MySQL サービス レイヤーからストレージ エンジン レイヤーに移動されて実行されます。利点は、ストレージ エンジンが ID に基づいてテーブルからデータを読み取る頻度が少なくなることです。上記の例では、インデックス プッシュダウンがない場合、テーブルをさらに 2 回クエリする必要があります。さらに、テーブル クエリは個別の IO になる可能性が高く、場合によってはデータベースのパフォーマンスが大幅に向上する可能性があります。 要約するこれで、MySQL Index Pushdown (ICP) の簡単な理解と例に関するこの記事は終了です。MySQL Index Pushdown (ICP) に関するより関連性の高いコンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: CSS3入力ボックスの実装コードはGoogleログインのアニメーション効果に似ています
>>: docker pruneコマンドは、あまり使用されないデータを定期的にクリーンアップするために使用できます。
目次1. Lvsの紹介2. Lvs負荷分散モード2.1 NAT 2.2 ターン2.3 DRモード3....
以前、raspbian で実行したときに opencv の一部の依存関係をパッケージ化できず、一部の...
よく遭遇する問題: 下部の要素を「下部に貼り付ける」効果を CSS でどのように実現するか。この記事...
目次必要回避策1. ツールチップを設定する2. hookToolTip変数を定義する3. メソッド内...
Web デザインで js を使用すると、多くのページ効果を実現できますが、HTML タグの META...
1. Docker pullはイメージをプルします$ docker pull {IMAGE_NAME...
目次1. JavaScript がシングルスレッドなのはなぜですか? 2. タスクキュー3. イベン...
目次背景分析する方法背景MySQL は 26 日の 16:23:49 に大量のスロー クエリを生成し...
VIP を設定した後、アクティブ/スタンバイの切り替え中に表示されるエラー メッセージは次のとおりで...
[解決策1: パディングの実装]原理:要素の padding の値がパーセンテージの場合、このパーセ...
HTML では、<img> タグはテキスト内の画像タグを定義するために使用されます。その...
1. はじめに最近、私は友人が JSON 配列を追加、削除、変更するための簡単なページを作成するのを...
コンテナをソートするためにdepends_onを使用しても、コンテナ間の依存関係の問題は完全には解決...
Web 標準に準拠した Web ページの構築は、jb51.net が常に全員と議論しているトピックで...
目次1. 読みやすいコード1. 統一コード形式2. マジックナンバーを削除する3. 単一機能原則2....