MySQLのパフォーマンスの最適化:インデックスプッシュダウンとは何ですか?

オリジナル: MySQLのパフォーマンスの最適化:インデックスプッシュダウンとは何ですか?

REVIEW

  • この記事では、私の公共の番号で始まった:庭の猿の技術の欄には、元は容易ではない、勧告をありがとうございます。
  • プッシュダウンインデックス(索引条件プッシュダウンは)に、ICPと呼ば Mysql5.6のクエリを最適化するためのバージョンに打ち上げ。

  • ICPを使用せずに、の使用非プライマリキーインデックスは(また、通常のインデックス又は二インデックスとも呼ばれる)のMySQLサーバに戻り、次に、索引付けされたデータにストレージエンジンによって検索、照会すると、サーバは、データと一致するかどうかを判断します。

  • ICPの場合に存在する特定の条件は、索引付けされた列であると判定された場合、この部分は、記憶されたエンジン状態に決定し、MySQLサーバであり、次いで、ストレージエンジン条件指数は、MySQLサーバを通過したか否かを決定することにより、場合にのみ、インデックス資格を取得されたデータは、唯一のMySQLサーバに返されます。

  • インデックス条件のプッシュダウンの最適化は、基礎となるテーブルのストレージエンジンのクエリの数を減らすことができ、あなたはMySQLのストレージエンジンからのサーバーの数を減らすことができ、データを受け取ります

 

オープンラインと

  • ID、名前、年齢、住所:ユーザーテーブル(ユーザー)を作製するために開始する前に、いくつかの主なフィールドがあります 。確立共同インデックス(名前、 年齢を)

  • 需要があると、すべてのユーザーのための最初の名前を一致させるための要件チェン、次のようにSQL文は次のとおりです。

  SELECT * ユーザーからどこ名などの「陈%」
  • 共同インデックス(名前、年齢)の使用は、クエリがいた「最高の左接頭辞」の原則によると、パフォーマンスは確かにフルテーブルスキャンよりも高くなります。

  • 他の条件がある場合の質問は、ありますか?需要があると仮定すると、名前の最初の単語をマッチングは陳、20歳のユーザーである必要があり、次のように、今回のSQL文は次のとおりです。

  SELECT * ユーザーからの名前のような「陈%」、年齢= 20
  • どのようにこのSQL文は、それを強制する必要がありますか?前Mysql5.6バージョンと分析後のバージョンに次の。

 

Mysql5.6以前のバージョン

  • バージョン5.6の前に、これは何のインデックスプッシュダウン最適化されていないので、プロセスを次の図に実行されます。

 

  • このフィールドは名前で年齢、直接問い合わせを無視し、(名前、年齢)このレッスンの木に2つの結果を見つけ、その後、バックテーブルクエリに何度も何度もid値を取るために保持し、それぞれ2,1のID、したがって、このプロセスはかかる二回表に戻ります

 

Mysql5.6およびそれ以降のバージョン

  • バージョン5.6、次の図の実装のプロセスをインデックスプッシュダウンの最適化を追加します。

  • 、木のマッチングにこれを唯一のレコードをInnoDBの年齢は、このフィールドを無視しませんでしたが、年齢が20に等しいかどうかを判断する内部インデックスには、記録がスキップ20に等しくない場合、これ(名前、年齢)インデックスツリー主キーのインデックスIDツリークエリにテーブルにすべてのデータのバックを移動するには、この時間をかけて、このプロセスは、とり再びテーブルへ

 

練習

  • もちろん、唯一の原理で上記の分析陳Mysql5.6は、MySQLのバージョンをインストールして、我々は次のように、上記のステートメントを解決し、本物を分析することができます:

  • 基づいているエクストラ見られた分析結果を説明することができる条件条件のために使用する指標プッシュダウンインデックスが使用されてきた示し、。

 

概要

  • インデックスを押し下げ、非主キー索引最適化、効果的にテーブルに数バックを減らすことができ、大幅にクエリの効率を向上させることができます。

  • 閉じるインデックスプッシュダウンは、設定ファイルを変更するには、次のコマンドを使用することができ、すべての後に、物語、なぜ近くにそれ優れた機能はなくなりました。

  セットoptimizer_switch = 'index_condition_pushdown =オフ';

 

おすすめ

転載: www.cnblogs.com/lonelyxmas/p/12630085.html