2016-08-26 17 views
1

クラスタ化インデックスおよび非クラスタ化インデックスについて読んで、非クラスタ化インデックスにはHashing for Clustered IndexおよびB + tree(またはB Tree)を使用します。私の結論は正しいのでしょうか?そうでない場合、データ構造レベルでのこれら2つの違いは何ですか?クラスタ化されたインデックスおよび非クラスタ化インデックスで使用されるデータ構造

答えて

0

簡単に言えば、以下のように説明することができます。

クラスタ化と非クラスタ化インデックスの両方が、質問は、MySQLに焦点を当てているように見えたときに、この答えが書かれた

for clustered index leaf node of the b-tree structure contains the Actual data. 
for non clustered index leaf node of the b-tree structure points the address of the actual data. 
+0

だから、いつハッシュを使用するのですか? –

+0

ハッシングは、より大きいサイズの文字列に対して短い固定長キーを生成します。ハッシュについてもっと知りたければ、次のリンクから記事を読んでください。http://mobile.databasejournal.com/features/mssql/getting-started-with- hashing-in-sql-server.html –

+0

@UnnikrishnanR - そのリンクは、MySQLではなくMSSqlに関する話です。 –

1

、Bツリー構造に従います。

[mysql]という質問にタグが付いているので、 RDBMSで議論を制限する必要があります。

最近、主に使用しているはずの「エンジン」はInnoDBです。主にB +ツリー索引があります。 (それにはFULLTEXTSPATIALもありますが、私はそれらに入ることはありません)ではなく、に "ハッシュ"があります。

PRIMARY KEYは、クラスタ化されたB +ツリーです。すべてのデータはPKによって順序付けられ、その1つのB +ツリーに格納されます。 PKはクラスタ化することしかできず、BTreeにしかなりません。 PKもUnique(MySQLで)です。

セカンダリキーもB +ツリーです。セカンダリインデックスの列が含まれています。リーフノードには、主キーの列があります。セカンダリインデックスを使用した「ポイントクエリ」は、セカンダリインデックスツリーをドリルダウンし、プライマリキーをドリルダウンする必要があります。二次キーは「クラスタ化」できません。

一般的な用途では、BTreeが最適です。ハッシュはそれほど優れていることはめったにありません。ハッシュはレンジスキャンには役に立たず、BTree、特にB +ツリーはそのようなものには優れています。

インデックスがRAMにキャッシュできるよりも大きい場合、ハッシュはひどいです。通常、アクセスしたい「次の」キーは、最後にタッチしたキーに隣接していないので、I/Oが必要になる可能性があります。

+0

基本的にはインタビューの質問だったので、クラスタリングされたインデックスと非クラスタ化されたインデックスでハッシュとBツリーがどこに使われているのかが尋ねられました。私はそれに対して何を返すべきですか? –

+0

です。 MySQLだけのポジションであれば問題はナンセンスです。あなたの最善の答えは、あなたが思うよりもMySQLについて知っている(丁寧に)ことです。その位置が他のエンジン(MSSql、Oracle、Postgresなど)に関係する場合は、探している答えを教えてくれませんでした。つまり、 "クラスタ化インデックス"、 "ハッシュ"、 "BTree" (そしておそらく "B + Tree")、 "プライマリ" vs "セカンダリ"、 "ユニーク"などがあります。これらの用語は、ほぼ直交しています。 –

+0

レスポンスありがとうございますが、一般的なケース(MSSql、Oracle、Postgresなどを含む)については、解決策を教えてください –

関連する問題