JNK*_*JNK 6 index sql-server-2008 sql-server clustered-index
我和我的 DBA 在索引结构上存在分歧。
考虑医疗索赔的数据...
我们有Header包含以下字段的表:
ClaimId (varchar(50)), PaidAmount, MemberID...
对于每个标题,我们都有一个或多个记录,Detail例如:
ClaimId (varchar(50)), LineNumber (smallint), MemberId...
数据结构或重复的效率超出了这个问题的参数。
还有其他的表是领带回个别Detail线路通过ClaimId, LineNumber,我们经常JOIN Detail和Header上ClaimId也是如此。
对于Detail表,这对于聚集索引键更可取:
ClaimId
或者
ClaimId, LineNumber
ClaimId单独不是唯一的,但组合ClaimId, LineNumber对于Detail记录来说是唯一的。
我们中的一位人士认为,ClaimId单是一个更好的聚集键,因为它是更窄,并且查找将是多么有效,因为我们需要知道ClaimId我们在查找之前LineNumber。
另一种认为,两者的结合更好,因为它消除了额外的需要RowID,并且可以用于JOIN需要LineNumber作为JOIN条件的支持表。
这是胡说八道:
...单独的 ClaimId 是一个更好的聚集键,因为它更窄
因为这
单独的 ClaimId 不是唯一的j
非唯一聚集索引将添加一个 4 字节的唯一标识符以消除 ClaimId 的歧义,因为它是聚集索引。为什么?一个原因是所有 NC 索引都引用它:那么如何知道 ClaimId 是哪个?
已经证明(前段时间,现在可能无效并且找不到它)当您用尽 4 字节 uniquifier 的 2^32 个值时,非唯一聚集索引会中断
编辑 :
问题说明 ClaimId不是唯一的,因此假设 uniqifier 存在。无需评论它可能不存在于问题的上下文中