2011-12-17 10 views
1

私は、DB2のインデックスを作成するときに、次のコードで、たとえば:は、デフォルトでdbインデックスのコンポジットですか?

CREATE INDEX T_IDX ON T(
A, 
B) 

それが複合インデックスのですか? そうでない場合:どのように複合インデックスを作成できますか?二つの異なるインデックスを持つために、私はそれらを個別に作成する必要がありますよう:

CREATE INDEX T1_IDX ON T(A) 
CREATE INDEX T2_IDX ON T(A) 

EDIT:はい場合 この議論は、私が期待方向に行くのではありません(ただし、より良い1 :)に)私は実際にどのように尋ねました私は別の質問でそれをやろうとしましたが、あなたが私に期待して以来:

私はテーブルT(A、B、C)と検索関数search()を持っているとします。以下の方法のいずれかを使用して表から選択してください

WHERE A = x 
WHERE B = x 
WHERE C = x 
WHERE A = x AND B=y (and so on AC, CB, ABC) 

作成インデックスABCを作成すると、たとえばCのみを選択した場合などに動作しますか?それはあなたのクエリに依存

;: テーブルはかなり大きいです、そして挿入\アップデートではないので、頻繁

答えて

2

うん複数のフィールドを確認してください。複合インデックスを作成するために、2人の以上の列名を指定します。複合索引を使用する際に理解

は、クエリによって選択されたすべての列がコンポジット索引にある場合、DBENGINEは、テーブルにアクセスすることなく、インデックスからこれらの値を返すことができ

...あなたの最後の質問のように見えます。シーク時間が短縮されます。どちらか一方がクエリで使用されている場合

しかし、その後、個々のインデックスを作成すると、最高のサービスを提供します。実行されるクエリのタイプと、それらに含まれる値は/ filter/joinに依存します。

あなたは時々1、他の、またはその両方を持っている場合は、すべて3つのインデックスを作成することにも可能性があります。ただし、追加の索引を追加するたびに挿入、更新、または削除にかかる時間が増えることに注意してください。高度に管理された表では、索引を維持するオーバーヘッドがパフォーマンスに影響するため、

0

最初の答え:YES

CREATE INDEX JOB_BY_DPT 
     ON EMPLOYEE (WORKDEPT, JOB) 

セカンド回答たいていの場合、クエリの参照が単一の列の場合は、select * from T where A = 'something'のような単一のインデックスが必要ですが、列AとBの両方が参照先になる場合は、コンポジットを作成する必要があります。

さらにreferrenceのために定義することにより、複合インデックス=を作成する上

http://publib.boulder.ibm.com/infocenter/db2luw/v8/index.jsp?topic=/com.ibm.db2.udb.doc/admin/r0000919.htm

+1

最初の回答はどのようにしていいですか?あなたの例は、OPが提供した情報と一致します。 – xQbert

+1

これは間違いです...編集されました。 – Rahul

0

A、Bのインデックスは複合インデックスであり、Aだけを検索したり、Bを使用してAを検索したり、一般的なスキャンに使用できます。

A、Bのインデックス、Aだけのインデックスはありません.A、Bの部分検索はAしかない場合に使用できるのでしかし、より広範なインデックスは少し効率が悪くなります。したがって、Aルックアップが非常に頻繁で、書き込み要件によって余分なインデックスを更新することが許容される場合、正当な可能性があります。

A、BインデックスはBのみに基づく検索にはあまり適していないため、Bにインデックスを付ける必要があります。

関連する問題