MySQLデータベースのインデックスよくある質問

  私は、データベースの面接の質問の関連する側面をたくさん読んでますが、回答のほとんどは非常に正確ではありませんので、ご自身のブログで要約を行うことを決めました。

Q1:データベースのインデックスとは何ですか?どのような長所と短所?

1.Bツリー索引:使用されるインデックスほとんどのデータベース(InnoDBは、B +ツリーを使用します)。それは非常に迅速にデータ、データの特にルックへのアクセスを高速化することができます。欠点はインデックスのみの左端の列を見つけるために始めているクエリが列を持っている場合、インデックスは、列をスキップすることはできません範囲クエリを使用して、すべての列の右には索引チューニングの検索を使用することはできません。

2.ハッシュインデックス:ハッシュテーブルに基づいています。MySQLの、唯一の明示的なサポートメモリハッシュエンジンの検索で。ハッシュのルックアップの速度は非常に高速ですが、それだけをソートすることはできませんインデックス読み取りラインの値を避けるために使用されていないが、フィールドの値が格納されていない場合、ハッシュ値のハッシュインデックスと行のポインタが含まれています。ハッシュインデックスは、ハッシュ値を計算するために索引付けされた列の内容全体で使用されるので、サポートを見つけるために一致しないすべての列の一部です。ハッシュ等価比較のみをサポート、任意の範囲クエリをサポートしていません。ハッシュ衝突したら多くの単語、メンテナンスコストが非常に高いです。InnoDBサポート「適応ハッシュインデックス」(アダプティブハッシュインデックス)。

3.フルテキストインデックス:フルテキストインデックスは、それはむしろ比較インデックスの値よりも、テキストでキーワードを探し、インデックスの特殊なタイプです。MyISAMのみで当初利用できる、5.6.24後InnoDBは、フルテキストインデックスをサポートしています。フルテキストインデックスを使用するにはマッチ....に対して、同じ列に同時にフルテキスト検索を作成し、B-Treeインデックスの値に基づいて競合は存在しません照会します。

前記空間インデックス(R-treeインデックス)、MyISAMテーブルは、インデックスデータが全て緯度から来るプレフィックスクエリーなしの利点は、メモリの地理的データとして使用することができ、R-treeインデックスをサポートし、MySQLの欠点は、そのようなGISとして相関関数を使用することですMBRCONTAINS()などのデータを維持するが、GISでのMySQLは完璧ではないので、ほとんどの人は、この機能を使用することはありませんのでします。


Q2:なぜ実用的なバイナリサーチツリーまたはデータベース指標として赤黒木。

インデックスは、高効率で、logN個に達したが、それは、良いよりも害ディスクIOの多くになりますけれども、大量のデータを扱うにおける二分木は、木の高さは、高すぎます。そして、削除または挿入するデータがリンクリストデータ、バランスアルゴリズムを改善する必要になる構造的な変化につながる可能性があります。赤黒木、挿入および要素の削除、それが変色され、頻繁に回転(L、D)、時間の無駄です。しかし、赤黒木に缶は、この時点で赤黒木は、Bツリーの時間複雑度よりも低い少量のデータ。したがって、合計の考慮、Bツリーインデックスとしてデータベースの最終的な選択。


Q3:BツリーとB +ツリーのシナリオ:

1.Bの一般的ファイルシステムで使用されるツリー、及びそのようなMongoDBのようなデータベースインデックスの少数。

2.B +ツリーインデックスは主にMySQLのデータベースのために使用されています。


 

Q4:B +ツリーBツリーの比較優位

各ノードB-treeインデックスは、サブノードに加えて記憶されているだけでなく、データ領域を格納するので、単一の子ノードのノードインデックスポイントディスクIOの数木の多くのより高い高さ、よりありません。低いB +ツリーの高さ、およびすべてのデータがリーフノードに格納されている、リーフノードは、このように範囲を見つけやすい、クエリ性能を安定化させる、同じレベルにあります。

おすすめ

転載: www.cnblogs.com/CNty/p/10960803.html