2016-10-03 4 views
0

興味深い質問があります。クラスタインデックスとユニークインデックスの違いは何ですか?何がより速く、より速く、なぜですか? MySQLのInnoDBエンジンでクラスタまたは一意のインデックスMySql DB?

+1

[クラスタ化インデックスと非クラスタ化インデックスは実際何を意味するのですか?](http://stackoverflow.com/questions/1251636/what-do-clustered-and-non-clustered-index-actually-mean)または[mysqlドキュメント](https ://dev.mysql.com/doc/refman/5.7/en/innodb-index-types.html)?いいえの場合は、今すぐ実行します。はいの場合:「より良い」(特に「何のため」なしではない)ことはありません。しかし、今はこれを知っておくべきです。より具体的な質問がある場合は、より具体的な質問をする必要があります。 – Solarflare

答えて

0

、あなたは、通常のインデックスの3つの選択肢を得る:

  • PRIMARY KEY - データを "クラスタ化" と "独特の"。 (しばしばAUTO_INCREMENT
  • UNIQUE - 一意であり、クラスタ化されていません。
  • INDEX - ユニークではなく、クラスタ化されていません。

すべてがBTreesとして実装されています。 Clusteredとは、データがリーフノードにあることを意味します。

考察:

  • 3つの選択肢のいずれかが行(複数可)を探索の性能を支援することができ* InnoDBがPRIMARY KEY必要があります。
  • 既に存在するものを挿入しようとしたときにデータベースが鳴るようにするには、PRIMARY KEYまたはUNIQUEの列を指定する必要があります。
  • セカンダリキー(UNIQUEまたはINDEX)は、PRIMARY KEYを介してデータを検索します。推論1:PKによる行の発見がより速い。結果2:かさばる(例えば、VARCHAR(255))PKは、すべてのセカンダリキーに負担をかけます。
  • "カバーする"セカンダリキーは、そのBTreeを超える必要はありません。
  • データとインデックスは、16KBブロック単位でRAMにキャッシュされます。キャッシングはパフォーマンス上重要な考慮事項になります。
  • 高I/Oのためにインデックスを完全にキャッシュできない場合、UUID/GUIDインデックスはひどいです。
  • INSERTは、複製のためにPRIMARY KEYUNIQUEのキーをただちにチェックする必要がありますが、他のセカンダリキーの更新が遅れることがあります。 (この挿入時のパフォーマンスに影響を与える可能性があります。)これらの詳細から

、あなたの質問への答えを推測できる場合があります。

(注意:InnoDB以外のエンジンには、いくつかの特性があります)

関連する問題