云共享数据库Web应用程序中的主键类型

时间:2013-11-11 20:07:55

标签: sql-server asp.net-mvc

我正在用asp mvc和mssql构建一个云web应用程序。客户端将共享同一个数据库。 我仍然没有决定我的主键是什么类型。我应该使用GUID还是Bigint? 对于bigint,我担心scalabilty。有了GUID,我害怕表现。 这里的最佳做法是什么?像stackoverflow这样的大型云网站用作主键? 请告诉我一些事情。

谢谢,

Reynaldi

3 个答案:

答案 0 :(得分:0)

我会使用Guids。处理备份和还原时,您不需要顺序ID。

答案 1 :(得分:0)

我会使用INT,因为性能优于任何其他数据类型,您可以为主键提供最佳数据类型。您可以使用INT获得超过20亿条记录,如果您在一个表中需要超过20亿个主键,则应考虑使用表分区。但是,即使您的表中只有几千条记录,使用GUID或BIGINT也会产生性能损失。 INT是一个4字节的数据类型,GUID是一个16字节的数据类型,所以你可以说INT x 4内存需要存储GUID列和Plus性能损失。以下是marc_s Detailed Comparison of GUID Vs Int

的详细答案

答案 2 :(得分:0)

两者都有好有坏。真正的问题不是要使用什么数据类型,而是“将以何种方式使用数据”?

例如,如果您打算以一种数百万次读取的方式使用数据,并且需要按插入顺序排列数据,那么以这种方式对数据进行“排序”是有意义的插入,然后可能是IDENTITY INT列。真的不需要BIGINT,你甚至可以为你的INT专栏提供20亿美元,并且那里可能有40亿条记录,我怀疑你会到达那里。如果您想要“分片”或缩小表格,您将不想使用int或bigint。特别是当您使用SQL Azure时,这会使扩展变得简单,那么您可能希望在使用GUID的方向上引导更多。

确实使用GUID,它不是按照插入的顺序在表中“排序”,但如果您计划扩展,甚至用于连接其他数据库中的表,则使用它肯定是有意义的。

如果你要进行大规模的批量插入,比如说每行10,000行,那么像INT这样的东西会更适合,因为它会避免页面拆分,或者将其保持在最低限度。但是,如果批次插入在安静的时间发生,这不是问题。

同样,SQL Server索引很棒,如果你能为你的表获得一个合适的索引,就没有必要不使用它们中的任何一个。

索引是另一个鱼群,但由于它不是问题的一部分,我不会尝试在这里回答它,但我会花一点时间来理解太多/太少或错误的影响如果我是你,桌子上的索引。

您的问题的答案实际上并不像GUID或INT / BIGINT那么简单,而是对您的应用程序,其用法以及表格的使用方式和时间进行全面了解和理解。只有这样,你才能做出最适合你桌子的决定。

我希望这会有所帮助。