複数列の主キーの最初のフィールドに個別の単一列のインデックスを追加するのは冗長ですか?テーブルのサイズと比較した、その最初の列の一意の値の相対的な量に依存しますか?
私の具体的なシナリオは、2列と3列の主キーを使用して、適度なサイズのテーブル(20k〜500k行)をいくつか作成することです。これらのテーブルの最初の列は、特定のビジネスアクティビティ(ここでは単に「アクティビティ」と呼びます)に対応する整数であり、2番目の列は製品ID(実際にはUPC)またはビジネスロケーション識別子のいずれかです。
-- Activity - upc table: entire table is a two-column primary key
CREATE TABLE activity_upc (
activity_id int NOT NULL,
upc_id dec(18,0) NOT NULL,
CONSTRAINT PRIMARY KEY PK_activity_upc CLUSTERED ( activity_id, upc_id )
)
-- One of several transaction tables, unique by activity, location, and date
-- (date in SQL server is a 3-byte integer)
CREATE TABLE activity_stuff (
activity_id int NOT NULL,
location_id smallint NOT NULL,
transaction_date date NOT NULL,
[ other columns ],
CONSTRAINT PRIMARY KEY PK_activity_stuff CLUSTERED (
activity_id, location_id, transaction_date )
)
数百の一意のロカトンID、数千の一意のアクティビティID、および100万を超える一意のUPCがあります。location_id
だけでクエリを実行することが非常に多いため、にインデックスがありますlocation_id
。単一列フィルターとしても頻繁に使用されるactivity_idに個別のインデックスを追加すると、役立つでしょうか、それともばかげて冗長でしょうか。