我在我正在处理的 SQL Server 2005 数据库中遇到了在我看来有点奇怪的模式,并且想知道它是否只是我,或者它是否真的很奇怪。
有许多带有uniqueidentifier
主键的表,它们也有一个计算列,它是该CHECKSUM
键的,例如
[CustomerGuid] [uniqueidentifier] ROWGUIDCOL NOT NULL,
[CustomerHash] AS (CHECKSUM([CustomerGuid])) PERSISTED,
Run Code Online (Sandbox Code Playgroud)
然后,有包含这两个字段的索引,例如
CREATE NONCLUSTERED INDEX [IX_Customer_CustomerHashAndGuid] ON [dbo].[Customer]
(
[CustomerHash] ASC,
[CustomerGuid] ASC
)
Run Code Online (Sandbox Code Playgroud)
此模式还会弹出不是主键的 Guid - 例如,每个订单都有一个Order
表,CustomerGuid
以及CustomerHash
这两个列上的索引,用于按客户查找订单。
当然,校验和的全部意义在于您仅在校验和上创建索引,因此 aSELECT
将检索与校验和匹配的记录,然后比较基础值作为安全检查?将潜在价值放入指数中不会浪费大量空间而没有真正的收益吗?