0

我正在使用 asp mvc 和 mssql 构建一个云 Web 应用程序。客户端将共享同一个数据库。我还没有决定我的主键是什么类型。我应该使用 GUID 还是 Bigint?使用 bigint,我担心可扩展性。使用 GUID,我害怕性能。这里的最佳做法是什么?像stackoverflow这样的大型云网站使用什么作为主键?请给我一些启示。

谢谢,

雷纳尔迪

4

3 回答 3

0

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

例如,如果您打算以一种将有数百万次读取的方式使用数据,并且您需要按插入顺序排列数据,那么按照插入的方式对数据进行“排序”是有意义的,那么也许 IDENTITY INT 列就可以了。真的不需要 BIGINT,你甚至可以在你的 INT 列中播种 -20 亿条记录,其中可能有 40 亿条记录,我怀疑你会到达那里。如果您想要“分片”或扩展您的表,您将不会想要使用 int 或 bigint。尤其是当您使用 SQL Azure 时,这使得横向扩展变得简单,您可能希望更多地转向使用 GUID。

当然,使用 GUID 时,它不会按插入顺序在表中“排序”,但如果您打算向外扩展,甚至用于连接其他数据库中的表,那么使用它绝对是有意义的。

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

同样,SQL Server 索引非常出色,如果您可以为您的表获取适当的索引,则无需使用其中任何一个。

索引是另一回事,但由于它不是问题的一部分,我不会在这里尝试回答,但我会花一些时间来了解索引过多/过少或错误对索引的影响表,如果我是你。

实际上,您的问题的答案并不像 GUID 或 INT/BIGINT 那样简单,而是对您的应用程序、其用法以及如何以及何时使用您的表的整体视图和理解。只有这样,您才能做出最适合您餐桌的决定。

我希望这有帮助。

于 2013-11-11T20:49:50.387 回答
0

我会使用 INT,因为性能比任何其他数据类型都要好,这是您可以为主键提供的最佳数据类型。您可以使用 INT 获得超过 20 亿条记录,如果您在一个表中需要超过 20 亿个主键,您应该考虑使用表分区。但是,即使您的表中只有几千条记录,使用 GUID 或 BIGINT 仍然会降低性能。INT 是 4 字节数据类型,而 GUID 是 16 字节数据类型,因此您可以说需要 INT x 4 内存来存储 GUID 列并且加上性能损失。这是marc_s GUID Vs Int的详细比较的一个非常详细的答案

于 2013-11-11T20:34:11.867 回答
0

我会使用指南。在处理备份和恢复时,您不需要顺序 ID。

于 2013-11-11T20:17:08.830 回答