これからアドバイスをお願いします。オブジェクトを追跡したいテーブルと、オブジェクトに関連するキーのリストを取得しました。例:
OBJECTID ITEMTYPE ITEMKEY
-------- -------- -------
1 1 THE
1 1 BROWN
1 2 APPLE
1 3 ORANGE
2 2 WINDOW
OBJECTIDとITEMKEYはどちらも高い選択性を持っています(つまり、OBJECTIDとITEMKEYは非常に多様です)。私のアクセスは2つの方法です:
オブジェクトID別:オブジェクトが変更されるたびに、キーのリストが変更されるため、オブジェクトIDに基づいてキーが必要になります。変更は頻繁に発生します。
ITEMKEYによる:これはキーワード検索用であり、頻繁に発生します。
したがって、おそらく2つのキーが必要であり、クラスター化されたインデックス用に1つを選択します(より頻繁にアクセスされるキー、または速度を上げたい場所で、今のところ、クラスター化されたオブジェクトIDを優先すると仮定します)。私が混乱しているのは、それをどのように設計すべきかということです。
私の質問は、どちらが良いかです:
a)(OBJECTID、ITEMTYPE、ITEMKEY)のクラスター化されたインデックス、次に(ITEMKEY)のインデックス。私の懸念は、クラスター化されたインデックスが非常に大きいため(2 int、1 string)、すべてのインデックス項目がクラスター化されたキーを指すようになるため、インデックスが大きくなることです。
b)実行中のID DIRECTORYID(整数)を主キーおよびクラスター化インデックスとして使用して新しい列を作成し、(OBJECTID、ITEMTYPE、ITEMKEY)と(ITEMKEY)の2つのインデックスを宣言します。これにより、インデックススペースが最小限に抑えられますが、ルックアップコストが高くなります。
c)(OBJECTID、ITEMTYPE、ITEMKEY)のクラスター化インデックス、およびその上の(ITEMKEY、ITEMTYPE、OBJECTID)のマテリアライズド・ビュー。私の論理では、これはキールックアップを回避し、オーバーヘッドが高くなる代わりに、a)のルックアップを使用したインデックスと同じ大きさになります。
d)えーと...要件を考えるともっと良い方法があるのでしょうか?
よろしくお願いします、アンドリュー