【发布时间】:2011-05-26 00:24:00
【问题描述】:
我正在特别考虑未签名的int。
这是一个实际的例子:当你的身份列达到最大值时你会怎么做?可以使用BigInt(8 字节存储而不是 4)或重构应用程序以支持负整数,甚至可以创建自己的规则,如this answer 所示;这些选项都不是最优的。
UInt 将是一个理想的解决方案,但 SQL Server 不提供它(而 MySQL 提供)。
我知道无符号数据类型不是 SQL 标准 (SQL-2003) 的一部分,但对我来说仍然是一种浪费。
不包括这些的原因是什么(在 SQL Server 或标准中)?
【问题讨论】:
-
询问 SQL Server 设计团队.....另外:您是否真的会最大化甚至 2 BILLION INT IDENTITY 值? REALLY?!?!?! 如果您有超过 20 亿行正在处理的任何内容,我敢打赌,您可以腾出一些磁盘空间并使用 BIGINT 作为 IDENTITY...。
-
marc_s 是什么意思?这只是连续 50 年每 800 毫秒插入一次,你的表没有那种活动吗? :)
-
@Mike M:并不是我们所有人都在开发米老鼠应用程序……我们在不到 2 年的时间里使用了 30 亿多个 bigint。峰值大于每秒 2000 行。
-
@gbn 我并不是要暗示没有人有这种负担。但是,如前所述,如果您每秒的行数超过 2000 行,那么额外的 2B 将无济于事。
-
@Mike M 和@marc_s,如果我在一个有 20 亿行表的系统上工作,我可能会注意浪费的存储空间。我可能会注意索引页面大小和索引扫描性能。在这种情况下,我不想浪费空间。
标签: sql sql-server sqldatatypes unsigned-integer