2012-03-13 33 views
0

在数据库上生成主键或在应用程序代码中生成主键时,尤其是在为键使用GUID/UniqueIdentifier数据类型时,“更好”是什么?在数据库中创建Guid PK。代码

我已经阅读了使用Guid和int数据类型之间的区别,它听起来像Guids对于所谓的“离线生成”是可行的。

E.g.

而不是在数据库中有一个NEWID() contstraint。在一个项目中(我们使用实体框架),我们在应用程序代码Guid.NewGuid()中使用插入数据时生成PK。

这是一个坏方法吗?

我的担忧是:

  • 数据库索引:数据库性能,因为标识的可能不是连续
  • ,关键是已经使用了一个64十亿机会。 (考虑到应用不会很大,但可能需要增长空间)
  • 也许还有其他缺点?

回答

1

以及实际上,GUID可能是从SQL Server 2005的顺序有名为NEWSEQUENTIALID()功能,链接here

创建一个GUID比以前提供的 这个函数生成的任何GUID更大自Windows启动以来指定的计算机。在 重新启动Windows之后,GUID可以从较低范围重新开始,但 仍然是全局唯一的。当使用GUID列作为行 标识符时,使用NEWSEQUENTIALID可能比使用NEWID 函数更快。这是因为NEWID函数会导致随机活动 并使用较少的缓存数据页面。使用NEWSEQUENTIALID还有助于 完全填充数据和索引页面。

+0

是的我知道NEWSEQUENTIALID()对不起这就是我的意思是“NEWID()”这并不真正对我的问题说,是在数据库中还是在代码中创建更好,或者可以在代码中创建吗? – John 2012-03-13 08:13:05

+0

我认为可以在代码中创建。据我所知,guid是基于服务器的时间,MAC地址或IP地址(不确定)生成的。想不出任何关键的区别。 :) – fengd 2012-03-13 08:23:04