インデックスにはどのような種類があり、それぞれの利点は何ですか?
カバリング インデックスとクラスター化インデックスについて聞いたことがありますが、他にもありますか? それらをどこで使用しますか?
インデックスにはどのような種類があり、それぞれの利点は何ですか?
カバリング インデックスとクラスター化インデックスについて聞いたことがありますが、他にもありますか? それらをどこで使用しますか?
OdeToCodeには、基本的な違いをカバーする優れた記事があります
それが記事で言うように:
大規模なデータベースで優れたパフォーマンスを発揮するには、適切なインデックスが不可欠です。時々、あなたは良いインデックスで不十分に書かれたクエリを補うことができますが、最高のクエリでさえ貧弱なインデックスを補うのは難しいかもしれません。
まったく真実です...もしあなたがそれを始めたばかりなら、私はクラスター化インデックスと複合インデックスに焦点を合わせます。おそらくそれらがあなたが最も使用するものになるからです。
いくつかのインデックスタイプを追加します
BITMAP-可能な値の数が非常に少なく、非常に高速で、多くのスペースを占有しない場合
PARTITIONED-ストレージまたはパフォーマンス上の理由から、非常に大きなデータベースオブジェクトで通常有利ないくつかのプロパティに基づいてインデックスをパーティション化できます。
FUNCTION / EXPRESSIONインデックス-テーブルに基づいて値を事前に計算し、それをインデックスに格納するために使用されます。非常に単純な例として、lower()またはサブストリング関数に基づくインデックスがあります。
PostgreSQL では、述語に一致する行のみがインデックス化される部分インデックスを使用できます。たとえば、アクティブなレコードのみの顧客テーブルにインデックスを付けたい場合があります。これは次のようになります。
create index i on customers (id, name, whatever) where is_active is true;
インデックスに多くの列があり、多くの非アクティブな顧客がいる場合、これはスペース (インデックスがより少ないディスク ページに格納される) とパフォーマンスの点で大きな利点となります。必要なインデックスにヒットするには、少なくとも次の述語を指定する必要があります。
select name from customers where is_active is true;
従来の通念では、インデックスの選択はカーディナリティに基づくべきであることが示唆されています。彼らは言うでしょう、
GENDER のようなカーディナリティの低い列には、ビットマップを使用します。LAST_NAME のようにカーディナリティが高い場合は、b-tree を使用します。
これは Oracleには当てはまりません。代わりに、アプリケーションのタイプ (OLTP と OLAP) に基づいてインデックスを選択する必要があります。ビットマップ インデックスを含むテーブルの DML は、重大なロック競合を引き起こす可能性があります。一方、Oracle CBO は複数のビットマップ インデックスを簡単に組み合わせることができ、ビットマップ インデックスを使用して null を検索できます。原則として:
頻繁な DML とルーチン クエリを使用するOLTPシステムの場合は、btree を使用します。DML およびアドホック クエリの頻度が低いOLAPシステムの場合は、ビットマップを使用します。
これが他のデータベースに当てはまるかどうかはわかりませんが、コメントを歓迎します。次の記事では、この件についてさらに説明します。
Jason Massie( http://statisticsio.com/)とBrent Ozar(http://www.brentozar.com/)のブログで関連情報を検索することをお勧めします。彼らは、インデックスを扱う実際のシナリオについていくつかの投稿をしています。
データベース システムが異なれば、同じタイプのインデックスに対しても異なる名前が付けられるため、これには注意してください。たとえば、SQL Server と Sybase が「クラスター化インデックス」と呼んでいるものは、Oracle では「インデックス編成テーブル」と呼ばれます。
Oracle には、B ツリー、ビットマップ、パーティション化および非パーティション化、リバース バイト、ビットマップ結合、およびドメイン インデックスのさまざまな組み合わせがあります。
この件に関する 11gR1 ドキュメントへのリンクは次のとおりです。
インデックスの種類とその意味を確認するには、 https ://msdn.microsoft.com/en-us/library/ms175049.aspx にアクセスしてください。