自动增长字段、手动增长字段、UniqueIdentifier这三种sql server主键类型选取策略都有各自的不足,那么应该如何解决呢?使用COMB数据类型是一个很好的方法。
COMB 数据类型的基本设计思路是这样的:既然UniqueIdentifier数据因毫无规律可言造成索引效率低下,影响了系统的性能,那么我们能不能通过组合的方式,保留UniqueIdentifier的前10个字节,用后6个字节表示GUID生成的时间(DateTime),这样我们将时间信息与 UniqueIdentifier组合起来,在保留UniqueIdentifier的***性的同时增加了有序性,以此来提高索引效率。
也许有人会担心 UniqueIdentifier减少到10字节会造成数据出现重复,其实不用担心,后6字节的时间精度可以达到1/300秒,两个COMB类型数据完全相同的可能性是在这1/300秒内生成的两个GUID前10个字节完全相同,这几乎是不可能的!在SQL Server中用SQL命令将这一思路实现出来便是:
DECLARE @aGuid UNIQUEIDENTIFIERSET @aGuid =
CAST(CAST(NEWID() AS BINARY(10))
+ CAST(GETDATE() AS BINARY(6)) AS
UNIQUEIDENTIFIER)
经过测试,使用COMB做sql server主键比使用INT做sql server主键,在检索、插入、更新、删除等操作上仍然显慢,但比Unidentifier类型要快上一些。
【编辑推荐】