複合或單欄位分群鍵
我的 DBA 和我在索引結構上存在分歧。
考慮醫療索賠的數據…
我們的
Header
表格包含以下欄位:
ClaimId (varchar(50)), PaidAmount, MemberID...
對於每個標題,我們都有一個或多個記錄,
Detail
例如:
ClaimId (varchar(50)), LineNumber (smallint), MemberId...
資料結構或重複的效率超出了這個問題的參數。
還有一些額外的表格通過,我們經常和on連接到各個
Detail
行。ClaimId, LineNumber``JOIN
Detail``Header``ClaimId
對於
Detail
表,這對於聚集索引鍵更可取:
ClaimId
要麼
ClaimId, LineNumber
ClaimId
單獨不是唯一的,但組合ClaimId, LineNumber
是唯一的Detail
記錄。我們中的一個人認為,
ClaimId
單獨是一個更好的聚集鍵,因為它更窄,並且查找將同樣有效,因為我們需要ClaimId
在查找之前知道LineNumber
.另一個認為兩者結合更好,因為它不需要額外的
RowID
,並且可以用於JOIN
需要LineNumber
作為JOIN
條件的支持表。
這是胡說八道:
… ClaimId 單獨是一個更好的集群鍵,因為它更窄
因為這
單獨的 ClaimId 不是唯一的
非唯一聚集索引將添加一個 4 字節的唯一性以消除 ClaimId 的歧義,因為它是聚集索引。為什麼?一個原因是所有 NC 索引都引用它:那麼如何知道 ClaimId 是哪個?
已經證明(前一段時間,現在可能無效並且找不到它)當您耗盡 4 字節唯一標識符的 2^32 個值時,非唯一聚集索引會中斷
編輯 :
問題狀態 ClaimId不是唯一的,因此假設存在 uniqifier。無需評論它可能不存在於問題的上下文中