序文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コマンドは、あまり使用されないデータを定期的にクリーンアップするために使用できます。
コードをコピーコードは次のとおりです。 <!DOCTYPE html PUBLIC "...
マップ タグはペアで表示する必要があります。 <map> ....</map>...
目次ロックの概要ロックの分類データベース操作の粒度データ操作の種類MySQL ロックさまざまなストレ...
この記事の例では、テーブル行データのスクロール効果を実現するためのjQueryの具体的なコードを参考...
MySQL は、コミュニティ エディション (コミュニティ サーバー) とエンタープライズ エディシ...
この記事では、async/await がすべての JavaScript 開発者にとって非同期プログラ...
1. コンテナにnginxサービスをデプロイするcentos:7 イメージはコンテナを実行し、このコ...
目次1. クラス1.1 コンストラクタ() 1.2 ゲッターとセッター1.3 これ1.4 静的プロパ...
必要:ハードコードされたデータの代わりに、セレクター内のオプション値の動的な表示を実装します。私のロ...
プロジェクトドキュメントディレクトリDiv+CSS 命名規則 - 4 - Div+css 命名規則 ...
この記事では、マウス フリップナビゲーションの制作についてまだ疑問を持っている友人の役に立つことを期...
このタグはHTML3.2の一部ではなく、MSIE3以降のカーネルのみをサポートしています。そのため、...
Dockerfileの作成expressによって自動的に作成されたディレクトリを例にとると、ディレク...
目次序文QueryCache の概要クエリキャッシュ構成QueryCache の使用queryCac...
圧縮パッケージのインストールは、mysql-5.7 以降、大幅に変更されました。この記事では、mys...