我们有一个MSSQL数据库,其中所有主键都是GUID(uniqueidentifiers)。 GUID是在客户端(用C#)生成的,我们正在考虑改变客户端来生成顺序(梳)GUID,而不是仅仅使用Guid.NewGuid()来提高数据库性能。
如果我们这样做,这将如何影响已经具有“随机”GUID的数据作为集群PK的安装? 任何事情都可以完成(短的改变所有的PK值)重build索引,以避免进一步的碎片和不良的插入性能?
如果可以,请给出明确而详细的答案。 我是一名C#开发人员,并不太熟悉SQL Server的所有复杂性。
谢谢!
快速评论:GUID +聚集索引? 这听起来很糟糕 – 聚集索引意味着表按照索引的顺序在物理上位于磁盘上 – 所以插入必须重新编写数据库的页面以便按顺序排列。 将其更改为非聚集索引,性能将会提高。
顺序的GUID有很多问题,如果顺序的话,它们确实不是唯一的,如果你在一个地方扩展一个片断以便在多个地方运行,序列可能会被重复。
尝试删除聚集索引,并创build非聚集索引 – 您几乎可以肯定地解决任何问题 – 随机GUID 不是一个性能问题,Guid.NewGuid没有花时间(PLENTY的其他东西会减速之前,例程是一个问题)。
集群指数并不是完美的。