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

bre*_*dog 10 sql database sql-server database-design primary-key

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

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

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

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

Ode*_*ded 10

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

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

  • @ sv88erik - 减少服务器的工作量. (3认同)

sv8*_*rik 9

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

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

编辑:

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

  • -1表示针对所有证据的GUID否则.那些引用聚簇索引的非聚簇索引呢? (4认同)

kem*_*002 5

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

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

  • 你能提供证据证明guid使得数据库的速度慢得多吗? (2认同)

Dav*_*vid 5

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

请记住以下几点:

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

  • 这很有趣,因为我看到微软一直使用GUID作为主键.例如,Microsoft CRM使用GUID作为主键.GUID的一个优点是您不必担心排序,并且不可能获得密钥违规(除非您以某种方式重用以前的密钥). (2认同)