表结构(SalesPersonProduct)
SalesPersonProductId INT (PK, Clustered)
SalesPersonId INT (FK - non-unique - Nullable)
ProductId INT (FK - non-unique - Nullable)
AreaId INT (Not Null)
DistributionType INT (Not Null)
ItemOrder INT (Not Null)
ItemSize INT (Not Null)
场景:SalesPersonId是非唯一的,实际上此列中可能有70-80个重复项。但是,这是唯一用于读取和连接的列,并且当前没有索引。
SalesPersonProductId仅用作参考PK,这些表的更新通过PK处理,但很少见。一旦将行添加到表中,PK或SalesPersonId都不会更新。
问题:
假设我不能对表结构或相关表进行任何更改。将现有的PK更改为非聚集索引,并将SalesPersonId添加为聚簇索引,我会更好吗?或者只是将SalesPersonId添加为标准的非聚集索引?
我在幕后知道许多非唯一值会获得唯一标识符 - 但是这个列几乎用于所有读取,我希望这会提供最佳性能增益,但代价是现在用于保留"唯一性的附加字节"在这个新的聚集索引上。
答案 0 :(得分:0)
i)哪一列最常用于搜索,即在where子句中使用最多。如果SalesPersonId然后使其成为CI,或者您可以将SalesPersonId和productid作为CI。
ii)如果你可以更进一步,那么计算索引的选择性