我有一个包含大量行(10K +)的表,主键是GUID.主键是群集的.此表的查询性能非常低.请提供建议,以提高效率.
GUID上的聚簇索引不是一个好的设计.GUID的本质是它是随机的,而聚簇索引通过密钥对记录进行物理排序.这两件事完全不一致.对于每个插入SQL,必须重新排序磁盘上的记录!从此索引中删除聚类!
使用群集的时间是指您对数据有"自然"顺序:插入时间,帐号等.对于时间字段,群集几乎是免费的.对于帐号,它可能是免费的或便宜的(当按顺序分配帐号时).
虽然可能存在围绕GUID问题的技术方法,但最好的想法是了解何时使用群集.
使用GUID作为主键没有问题.只需确保在实际将GUID设置为主键时,将其自动创建的索引设置为非群集类型.很多人忘记(或不知道)在SQL Server中执行此操作.
切勿在GUID上使用聚簇索引.这将导致磁盘上GUID周围的物理排序,这显然毫无意义(正如其他人已经指出的那样)
您需要使用newsequentialid()代替,在这里看到一些简单的代码来显示newid和Newsequentialid之间的区别