それでも私は、MySQLのインデックスを知っているのですか?これは完全なB-とB +ツリーのツリーを知るための時間です

序文

インデックスにブログをたくさん読んで、同じくらい言います。しかし、私は、このようなB-Treeインデックス、ハッシュインデックスとして、インデックスの概念のいくつかを理解しましょう決して、唯一のインデックスが....たぶん私のような人々がた​​くさんあり、私は、そのような明確なコンセプトとして、Bツリー、B +ツリー構造を勉強し始めましたインタビューの中で質問に答えるにつながります!

どのような指標がありますか?

MySQLのインデックスは、効率的にデータのデータ構造を得るのを助けることです。

インデックスは、あなたが行うことができますか?

データクエリの効率を向上させます。

インデックス:迅速なデータ構造を見つけるソート!インデックスは、後者によって見つけるの背後にあるの並べ替え、および順序に影響を与える可能性があります。

分類の最初に、インデックス

ストレージ構造から分割1. Bツリーインデックス(又はB +ツリーインデックスB木)、ハッシュインデックス、フルインデックスフルテキストインデックス、R-Treeインデックス。

一般的なインデックス、インデックスのみ、複合インデックス:ポイントにアプリケーションレベル2.。

鍵データ(インデックス)シーケンス関係の論理 - 物理順序:クラスタ化インデックス、非クラスタ化インデックス。

1)場合、インデックスストアに保存されている形態で説明しました、

2)分類プロセスを使用してインデックスであり、両者は異なるレベルに分かれています。しかし、通常我々は、一般的には、アプリケーションレベルの部門を参照するインデックスのタイプについて話しています。

Android携帯電話などの携帯電話の分類、IOS電話とHuawei社の携帯電話、アップルの携帯電話、OPPO携帯電話のように。

  • 共通のインデックスは:すなわち、単一の列のインデックスが含まれ、テーブルには、複数の独立したインデックスを持つことができます

  • インデックスのみ:索引列の値は一意であるが、自由な値を許可する必要があります

  • 複合インデックス:複数の列を含む、すなわち、インデックス

  • クラスタ化インデックス(クラスタ化インデックス):ていない単一のインデックス・タイプが、データ記憶装置。実装の詳細に依存して、InnoDBはインデックスが実際には同じ構造(技術B +ツリー)におけるB-Treeインデックスとデータラインに格納されているクラスタ化。

  • 非クラスタ化インデックス:クラスタ化インデックスは、非クラスタ化インデックス(真顔)ではありません。

基本となるインデックスの第二に、実現

MySQLのInnoDBのデフォルトストレージエンジンのみ明示的にサポートBツリー頻繁にアクセスされるテーブルのインデックス(B +ツリーは技術的である)、InnoDBの透過確立適応ハッシュインデックス、Bツリーインデックスに基づいて確立された、すなわちハッシュインデックス大幅に検索効率を向上させることができ、クライアントは、透明手に負えない、暗黙的です。

ストレージエンジンはさておき、のみ(アブストラクト)の実装を議論

Hash索引

ハッシュテーブルの実装に基づいて、唯一の正確なクエリインデックスは、ストレージエンジンは、すべてのインデックス列のハッシュコード(ハッシュコード)について算出されたデータの各行のすべての列に有効であることが一致し、すべてのハッシュインデックスハッシュコードストレージインデックスに、インデックステーブル中の各データ列のポインタを保持しながら。

v2-7bec3683f56acb9b780b1fa6f7265bb6_hd.png

エンジンがもはやデータを取得するためにフルテーブルスキャンを格納する必要がないので、Bツリーは、データアクセス速度を高速化することができ、データは、様々なノード間に分散します。

v2-274de1de0624e25931fcaa212876d292_hd.png

Bツリーインデックスデータベースの改良版も使用インデックス構造を格納しています。リーフノード上のデータ、および順次アクセス・ポインタを増加させ、隣接するリーフノードのアドレスに各リーフノード点。範囲検索、Bツリーを見つけるために比較した場合にのみ2つのノードが、横断することができます。B +ツリーより高い効率と比較して、Bツリーとノードのすべてを取得する必要があり、。

v2-3c6d81011ba7629234be88196502c358_hd.png

例:ID主キー、あなたが学生のテーブルを持っていると言います

v2-1c1b57f765695925a0fb3d956ee90278_hd.png

(セカンダリインデックスにより達成される)のMyISAMエンジンに実装

v2-3417d2b80be23998b98354816af3203f_hd.jpg

InnoDBの実装

v2-66a7f360f8fcb5b47d224814e043e823_hd.png


v2-06d7b7779ce689e333730670271d5ba6_hd.png


課題

Q:なぜ、むしろハッシュ、バイナリツリー、赤、黒の木よりも、デフォルトのBツリーを使用してインデックス構造は、ありますか?

ハッシュ:あなたはすぐに見つけることができますが、ないため、IO高い複雑さはありませんが。

バイナリツリー: IOとコスト高に関連するデータと非常に不均一なツリーではなく、自己バランス、検索効率(木の高さ)。

赤黒木:木の高さは、データ量が増加するにつれて増加、IOのコストが高いです。

Q:なぜ、公式には、主キー索引としての自己成長を使用することをお勧めします。

B +ツリーの結合特性、自動インクリメントの主キーは、偶数ページに分割するページ分割を最小にするため、挿入時に、連続しており、ごく一部の分割。及びデータの移動を減らすことができ、各挿入端に挿入されます。要するに、周波数分割および動きを低減することです。

連続したデータを補間します:


v2-97e1fc32d8b1c5ec14e827eb619795b6_hd.gif

非連続的なデータの挿入



v2-404a9ec45e97550a9b1b8c5e9c6b766a_hd.gif

最後に、私たちは、ヨーヨーは、物品、支援への感謝を覚えている賞賛のポイントのように、交換を歓迎します!



おすすめ

転載: blog.51cto.com/14442094/2433452