表結構(SalesPersonProduct)聚集索引的外鍵VS主鍵
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添加爲標準的非聚集索引?
我知道幕後很多非唯一值將獲得唯一標識符 - 但是這個列幾乎用於所有讀取,我期望這將提供最佳的性能增益,儘管以現在用於在這個新的聚集索引上保留「唯一性」的附加字節。
的費用不包括在額外的字節,它是網頁分割,你會從造成不寫入得到每個增加的聚類密鑰模式。如果有很多寫操作,則可能會發現非聚集索引(可能包含最常用的列作爲非關鍵列)會更好。如果你主要閱讀並閱讀足夠大量的數據,以致'SalesPersonID'上的非聚集索引實際上會引起你的問題,那麼你可能會發現將'SalesPersonId'作爲你的聚類密鑰存在淨收益。長話短說,這取決於。做一些測試。 – GarethD
有沒有什麼能讓你的行獨一無二,除了'SalesPersonProductId'? – SqlZim
Is(SalesPersonId,ProductId)是唯一的嗎? –