SQL主键,INT或GUID还是..?

时间:2010-12-29 20:06:16

标签: sql sql-server database database-design primary-key

为什么我不应该使用Integer作为我的表的主键?

数据库是SQL-CE,每年约有50,000个条目的两个主表,以及一些次要表。只有两个连接将一直存在于数据库中。但是更新将通过多个TCP套接字连接触发,因此将有许多交叉线程访问并使用相同的数据库连接。虽然活动非常低,但是同样的更新是不太可能的,但可能每天最多可能发生几次。

可能会将LINQ2SQL用于DAL或类型化数据集。

不确定此信息是否相关,但这就是我要问的原因,因为我不知道:)

5 个答案:

答案 0 :(得分:10)

使用整数 - 它更小,意味着更少的内存,更少的IO(磁盘和网络),更少的连接工作。

无论PK的类型如何,数据库都应该处理并发问题。

答案 1 :(得分:9)

使用GUID primkey的优点是它在世界上应该是唯一的,例如是否将数据从一个数据库移动到另一个数据库。所以你知道这行是唯一的。

但是如果我们谈论的是一个小型数据库,那么我更喜欢整数。

修改

如果您使用的是SQL Server 2005 ++,是否也可以使用NEWSEQUENTIALID(), 这会根据上面的行生成一个GUID。允许newid()的索引问题不再存在。

答案 2 :(得分:5)

  

我有什么理由不这样做   使用Integer作为我的主键   表?

不,只要每一个都是唯一的,整数就可以了。 Guids起初听起来不错,但实际上它们太大了。大多数时候,它使用大锤来杀死苍蝇,Guid的大小比使用整数慢得多。

答案 3 :(得分:5)

在这种情况下,我认为没有理由不使用自动增量整数。如果你到达一个整数无法处理数据量的点,那么你所说的是一个应用程序,它扩展到了无论如何都要涉及更多工作。

请记住以下几点:

  1. 整数是硬件的本机字大小。它与数据类型一样快速,简单,易用。
  2. 在考虑可能使用GUID时,要知道它们会造成可怕的主键。一般的关系数据库(我不能说所有,但MS SQL是一个很好的例子)不要很好地索引GUID。有一些黑客可以尝试制作更多符合索引的GUID,带走它们或留下它们。但一般来说,出于性能原因,应该避免使用GUID作为PK。

答案 4 :(得分:3)

绝对使用整数,您不希望在聚簇索引(PK)中使用GUID,因为它会导致表格不必要地碎片化。