为什么我不应该使用Integer作为我的表的主键?
数据库是SQL-CE,每年约有50,000个条目的两个主表,以及一些次要表。只有两个连接将一直存在于数据库中。但是更新将通过多个TCP套接字连接触发,因此将有许多交叉线程访问并使用相同的数据库连接。虽然活动非常低,但是同样的更新是不太可能的,但可能每天最多可能发生几次。
可能会将LINQ2SQL用于DAL或类型化数据集。
不确定此信息是否相关,但这就是我要问的原因,因为我不知道:)
答案 0 :(得分:10)
你应使用整数 - 它更小,意味着更少的内存,更少的IO(磁盘和网络),更少的连接工作。
无论PK的类型如何,数据库都应该处理并发问题。
答案 1 :(得分:9)
使用GUID
primkey的优点是它在世界上应该是唯一的,例如是否将数据从一个数据库移动到另一个数据库。所以你知道这行是唯一的。
但是如果我们谈论的是一个小型数据库,那么我更喜欢整数。
修改强>
如果您使用的是SQL Server 2005 ++,是否也可以使用NEWSEQUENTIALID(), 这会根据上面的行生成一个GUID。允许newid()的索引问题不再存在。
答案 2 :(得分:5)
我有什么理由不这样做 使用Integer作为我的主键 表?
不,只要每一个都是唯一的,整数就可以了。 Guids起初听起来不错,但实际上它们太大了。大多数时候,它使用大锤来杀死苍蝇,Guid的大小比使用整数慢得多。
答案 3 :(得分:5)
在这种情况下,我认为没有理由不使用自动增量整数。如果你到达一个整数无法处理数据量的点,那么你所说的是一个应用程序,它扩展到了无论如何都要涉及更多工作。
请记住以下几点:
答案 4 :(得分:3)
绝对使用整数,您不希望在聚簇索引(PK)中使用GUID,因为它会导致表格不必要地碎片化。