【发布时间】:2012-04-01 09:29:27
【问题描述】:
我们的数据存储在 SQL Server 2008 数据库中,表之间会有很多查询和连接。我们在团队内部有这个论点,有些人认为使用整数标识对性能更好,有些人认为使用 guid(唯一标识符)。
使用 GUID 作为主键,性能真的会受到那么严重的影响吗?
【问题讨论】:
-
如果您对聚集索引进行 PK,
UNIQUEIDENTIFIER会出现最大的性能和碎片问题 -
所以这很重要,那么说总是使用 int 而不是 guid 作为 pk 是真的吗?那为什么大家都用guid呢?
-
看看这个链接看看使用
UNIQUEIDENTIFIERsqlskills.com/blogs/paul/post/…对碎片的影响。另一方面,很少有人在聚集索引上使用UNIQUEIDENTIFIER -
我经常在聚集索引上使用它们。碎片问题是由于计算新值的方式造成的,而不是由于
uniqueidentifier数据类型本身。如果您对整数 ID 使用随机数,您将遇到同样的问题。使用NEWSEQUENTIALID()或类似 COMB 的方法,它不应该是一个真正的问题。 -
随机 GUID 上的聚类实际上可以提高性能,这与使用顺序 GUID 更好的普遍看法相反。 GUID 的随机性实际上可以减少最后一个数据页的争用,并显着提高高 I/O 系统上的插入性能。见:blog.kejser.org/2011/10/05/…
标签: sql-server database-design