小编Car*_*000的帖子

这个计算的 CHECKSUM() 索引设计有意义吗?

我在我正在处理的 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将检索与校验和匹配的记录,然后比较基础值作为安全检查?将潜在价值放入指数中不会浪费大量空间而没有真正的收益吗?

index sql-server

3
推荐指数
1
解决办法
1881
查看次数

标签 统计

index ×1

sql-server ×1