2012-05-03 11 views
0

プライマリインデックスとセカンダリインデックスのパフォーマンスの違いは何ですか?この違いの原因は何ですか?プライマリインデックスとセカンダリインデックス:パフォーマンスの違い

私は、セカンダリインデックスが別のテーブルに格納されているのを見てきました。このため、すべての操作が遅くなります。しかし、パフォーマンスの低下を正当化する理由がいくつかありますか?

どうもありがとう

+0

次のリンクを参考にしてください:http://dev.mysql.com/doc/refman/5.0/en/innodb-index-types.html、http://www.xaprb.com/blog/2006/07/04/how-to-exploit-mysql-index-optimizations /およびhttp://stackoverflow.com/questions/4419499/mysql-nosql-help-me-to-choose-the-right- one-on-a/4421601#4421601 –

+0

ありがとうございました!今私はそれらを読むでしょう。 – satboy78

答えて

4

クラスタ化テーブルはBツリー「ヒープ」部分なしである - 行はクラスタリング索引(主キー)のBツリー構造に直接格納されています。 Bツリーのノードは分割または合体することができるので、物理的な位置または行が変更される可能性があるので、セカンダリインデックスからローまでの単純な「ポインタ」を持つことはできません。したがって、セカンダリインデックスには、主索引フィールドは確実に行を識別できるようにします。

これは、Oracle、MS SQL Serverの場合に該当し、also true for InnoDBです。

クラスタ化されたテーブル内のセカンダリインデックスがこれ、ヒープベースのテーブルのセカンダリインデックスよりも「太っ」であることを意味します:

  • 、キャッシュの有効性を低下
  • 、データのクラスタリングを下げる

    • さらに重要なことに、クエリのパフォーマンスに影響を与えます。
      • セカンダリインデックスを使用したクエリ2番目のルックアップを回避するためのいくつかの興味深い最適化がありますが、InnoDBは私の知る限りではありません) 。
      • 一方、二次索引は当然covers個のフィールドより多いので、従来のヒープベースの索引では表アクセスが必要な場合には、二番目の参照は完全に回避することができます。ただし、ヒープベースのインデックスでは、単にフィールドを追加するだけで同じ効果を得ることができます。

    私はUse The Index, Luke!を引用してみましょう:「索引構成表とクラスタ化インデックスの利点は、2番目のインデックスを必要としないテーブルへのほとんどが限られています。」

    MySQLはストレージエンジンから独立してクラスタリングを選択することはできないので、残念です。

  • +1

    インデックスを使用している投稿。ルーク!非常によかったです。クラスタリングインデックスとセカンダリインデックスに関する多くのアイデアをクリアしました。ありがとう! – MasterV

    関連する問題