MySQLのパフォーマンスの最適化:どのように文字列にインデックスさ?

オリジナル: MySQLのパフォーマンスの最適化:どのように文字列には、インデックス化?

REVIEW

  • 最近のほとんどのシステムは、それが最良のメールボックスのパフォーマンスインデックスまたは電話番号の文字列を確保するためにどのようにして、二つの方法でログインするログインEメール、携帯電話番号をサポートしていますか?

  • 今日article'reは、MySQLで最高のパフォーマンスを達成するために、文字列のインデックスを追加する方法を模索する予定。

  • 第一著者のパブリック・マイクロチャンネル番号[に登場したこの記事のコード技術APE列 ]、元があなたをサポートするために、友人のように、簡単ではありません、ありがとうございました!
  • 陳からなり、インデックスの接頭語が何であるかを比較の指標とプレフィックスの一般的な指標こうしたプリフィックス索引彼Jianli最高のパフォーマンスとしてインデックスによってカバーされたインデックスのプレフィックスへの影響懸念しているこれらのパラグラフ。

 

プリフィックス索引

  • 名前が示すように、などの長い列の値のため我々は使用「しなければならない」プレフィックス指標値の最初の部分としてすぐに、インデックスを。収納スペースのインデックスが必要とされているので、同じインデックスには長すぎる、それらを維持するためにも、より困難です。BLOBTEXTVARCHAR

  • 例えば、我々はする必要がありUser、次のように、接頭辞のインデックステーブルのメールボックスを追加します。

   ALTER テーブルのユーザーの追加インデックスindex1の(Eメール(7));
  • 上記の文は、インデックスとして、電子メールの最初の7つの文字です。

 

プリフィックス索引と一般的な指標を比較

  • 私たちは、別途ます全体としてインデックスと最初の7文字の性能の差があるかどうかを確認するためのインデックスとして。次のようにインデックス付き文は次のとおりです。email

  ALTER テーブルユーザ追加インデックスindex1の(電子メール)、  ALTER テーブルユーザー追加インデックスINDEX2(電子メール(7))。

  • 仮定user表は(メールでは、ID、名前)次のデータを明らかにしました:(1,"陈某","chenmou1993@xxx")(2,"张某","chenmou1994@xxx")(3,"李某","chenmou1995@xxx")(4,"王某","chenmou1996@xxx")

  • 2図以下インデックスツリーに対応するインデックス2からindex1:

 

  • あなたは次のクエリを実行した場合、MySQLはどのようにそれを照会するためにインデックスを使用するには?

  *選択し、ユーザからの電子メール= 「chenmou1995 @ XXX」。

 

[1]通常の索引の実行

  1. インデックス値で見つかったindex1のインデックスツリーが満たされchenmou1995@xxx、この記録達成にid=2値。

  2. 主キー値は、主キーで発見されたid=2行の、電子メール決意値が正しいことを、これらの行は、結果セットを追加しました。

  3. テイクindex1次のレコード・インデックス・ツリーがちょうど場所を見つけましたが見つかりましたが満足していないemail=chenmou1995@xxx条件、サイクルの終わりを。

このプロセスは、システムだけで考えて、主キーのインデックスデータへの1つのバックを取る必要があるだけスキャン1ラインを

 

実装工程[2]プリフィックス索引

  1. インデックス値満たすINDEX2インデックスツリーが検索されたchenmou記録、第1のFOUNDは、ID = 1です。

  2. 主キーで見つかったが、価値が電子メールで送信されていないと判定され、主キー列ID = 1でありchenmou1995@xxx、廃棄する行を、

  3. 次のレコードだけ見出さINDEX2位置を取る、まだ見出されchenmou、削除ID = 2、次いで決定される行インデックスID、この値は、これらの行結果セットの付加を丸めます。

  4. 値がidxe2取らないようになるまで、前の手順を繰り返してchenmouループを終了します。

  このプロセスでは、主キー索引に戻って行くことは、データが4倍の時間がかかるの4行をスキャンしています。

 

  • 上記のクエリを比較することにより、それを見つけるのは簡単ですが、プリフィックス索引を使用した後、クエリは、読み取りデータの数が多くなる可能性があります。

  • しかし、このクエリのために、13のプレフィックスインデックスの長さは、それが確立されている場合はどうなりますか?会うのでchenmou1995あなたが直接見つけることができることを、一つだけのレコードはid=2、この時間だけでなく、スペースを減らし、走査線の数も減少しています。

  • :そして、結論に来た限り良い長さの定義として、それはスペース節約できるだけでなく、行うことができ、プリフィックス索引を使用し、それは多くの追加のクエリのコストを追加しませんが。

  • それでは、どのよう最高のパフォーマンスを達成するために、正しいプレフィックスインデックスを確立するには?上読む................

 

プリフィックス索引の最高のパフォーマンスを構築する方法

  • 上記の比較を通じて、我々は結論を引き出すことができる以下の手段、より良い、より高いその重複キー値を区別するの接頭辞インデックスの設立

  • だから、実際には非常に簡単であるか統計的差別、ちょうど繰り返し回数が可能かを決定するためのデータベースを必要としています。SQL次のように:

  選択
   カウント(別個の左側(電子メール、L4として4))、
   カウント別個左(電子メール、5))L5として、
   (カウント別個左(電子メール、6))L6、として
   カウント(別個の左側(電子メール、7)) L7として、
  ユーザから。
  • 同じID番号の郡の人々が6を前に、通常であるので、あなたが差別のための接頭辞を使用する場合でも、良い状況ではないが、例えば、私たちの国民ID番号、18の合計は、そのうち6は旧アドレスコードであり、同じ。ID番号は6つのワード接頭辞インデックスの長さをする場合は、この時点では、差別の指標は非常に低いです。

  • 我々は以前に述べた方法によると、あなたは、差別の要件を満たすことができるように、12以上のプレフィックスインデックスの長さを作成する必要があります。

  • しかし、長い選択されたインデックス、より大きなディスクスペースの量は、ほぼ同じデータページが低くなり、インデックス値の探索効率を置くことができます。

  • 我々は、クエリの唯一同等のIDカードのニーズに基づいてビジネス要件を決定することができますのであれば、他の治療法はありませんか?このように、だけでなく、同じクエリの効率を達成するためにも、より少ないスペースを取ることができますが。今、この問題を解決するための簡単な方法は、もちろん、確かに多くの1つの方法よりも、次のように:

 

  リバースメモリ

  それは逆さま預金、クエリごとに、あなたが書くことができたときには、ID番号を保存する場合:

   field_listにSELECT Tからid_cardは逆に=('ID番号が入力されました。');

  ためのID番号の最後の6 ないような論理アドレスコードが最後6は区別の十分な程度を提供する可能性があるように、繰り返されます。もちろん、実際にあなたが使用することを忘れないでください、検証を行うための方法を。count(distinct)

 

インデックスによってカバーされたインデックスのプレフィックスへの影響

  • 次のように接頭辞インデックスがカバーするインデックスの故障につながる、クエリ文は次のとおりです。

  IDを選択し、名前のユーザーからのメール= 「chenmou1995 @ XXX」。
  • プリフィックス索引の使用は、それがなければなりませんテーブルに戻って、時間に正確なクエリを確認するために、インデックスが無効でカバーするために、ここで使用されています。

  • 言い換えれば、インデックスをカバーするプリフィックス索引を使用し最適化するクエリのパフォーマンスへのアクセス権を持っており、これを使用すると、プリフィックス索引を検討する必要が使用するかどうかの選択の要因であるしないでください。

 

概要

  • 文字列インデックスを追加する方法この問題を検討する必要があるということである、陳は、ここに以下の提案を与えます:

  1. 文字列の長さが非常に短い場合は、直接全体のインデックスをお勧めします。

  2. プリフィックス索引分析差別、より良好な識別の使用に注意してください。

  3. 問題をカバーするプリフィックス索引を使用して無効なインデックスを考慮する必要があります。

 

おすすめ

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