首页 文章

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

提问于
浏览
1

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

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

2)如果整数显着更好地优化,那为什么?并且varchars可能会在未来迎头赶上,所以最终它无关紧要?

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

3 回答

  • -1

    对于MySQL,根据Alexey here,答案令人惊讶"not much" . 他的结论是:

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

  • 2

    你可能不会用完整数 .

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

  • 1
    • varchar需要额外的存储空间来获取长度信息

    • 比较和排序需要整理处理
      由于排序规则,

    • varchar可能无法跨系统匹配

    • int给出40亿行,bigint(8字节)给出18万亿行

    • pre-bigint,我见过十进制(19,0),它也提供了18万亿行

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

    要明确的是:你正在开发一个可能有超过40亿行的系统(你 don't know ),有复制,你 don't know 你知道什么是varchar与整数有什么不同?

相关问题