主键的int和varchar之间的性能差异是什么

时间:2011-01-09 06:38:44

标签: sql primary-key

我需要为需要对等复制的系统创建主键方案。所以我打算以某种方式结合一个独特的系统ID和一个序列号来提出唯一的ID。我想确保我永远不会用完ID,所以我正在考虑使用varchar字段,因为如果我开始耗尽,我总是可以添加另一个字符。但我已经读过整数为此更好地优化了。所以我有一些问题......

1)整数真的更好地优化了吗?如果是,那么varchars和整数之间有多大的性能差异?我现在要用火鸟。但我可能会稍后改变。或者可能支持多个db。所以我正在寻找概括,如果可能的话。

2)如果整数显着更好,那么为什么呢?并且varchars可能会在未来迎头赶上,所以最终无论如何都无关紧要了吗?

除了唯一的系统ID部分外,我的varchar密钥没有任何意义。但我可能想以某种方式掩盖这一点。另外,我打算有效地使用每个角色的所有位。例如,我不打算将整数123编码为字符串“123”。所以我不认为变量需要比整数更多的空间。

3 个答案:

答案 0 :(得分:2)

对于MySQL,根据Alexey here,答案令人惊讶地“不多”。他总结道:

  

所以,如果你有一个应用程序并且你需要有一些带有一小组可能值的表字段,我仍然建议你使用ENUM,但是现在我们可以看到性能损失可能没有那么大你期待。虽然又取决于您的数据和查询。

答案 1 :(得分:1)

可能不会用完整数。

例如在MySQL中,BigInt的最大值为18,446,744,073,709,551,615。因此,如果您每秒插入1亿行,则在用完数字之前需要5849年。

答案 2 :(得分:-1)

  • varchar需要额外的存储空间来获取长度信息
  • 比较和排序需要整理处理
  • 由于归类,
  • varchar可能无法跨系统匹配
  • int给出40亿行,bigint(8字节)给出18万亿行
  • pre-bigint,我见过十进制(19,0)也有18万亿行

使用varchar 以泪水结束......

要明确:你正在开发一个可能有超过40亿行的系统(你不知道),有复制,你不知道您将使用哪种RDBMS,并且您不了解varchar与整数的区别?