我需要为需要对等复制的系统创建主键方案 . 因此,我计划以某种方式将唯一的系统ID和序列号组合在一起,以获得唯一的ID . 我想确保我永远不会用完ID,所以我正在考虑使用varchar字段,因为如果我开始耗尽,我总是可以添加另一个字符 . 但我已经读过整数对此更好的优化 . 所以我有一些问题......
1)整数真的更好地优化了吗?如果它们是,varchars和整数之间有多少性能差异?我现在要用火鸟 . 但我可能会稍后改变 . 或者可能支持多个db . 所以我正在寻找概括,如果可能的话 .
2)如果整数显着更好地优化,那为什么?并且varchars可能会在未来迎头赶上,所以最终它无关紧要?
我的varchar密钥没有任何意义,除了唯一的系统ID部分 . 但我可能想以某种方式掩盖这一点 . 另外,我打算有效地使用每个角色的所有位 . 例如,我不打算将整数123编码为字符串“123” . 所以我不认为varchars需要比整数更多的空间 .
3 回答
对于MySQL,根据Alexey here,答案令人惊讶"not much" . 他的结论是:
你可能不会用完整数 .
例如,在MySQL中,BigInt的最大值为18,446,744,073,709,551,615 . 因此,如果您每秒插入1亿行,则在用完数字之前需要5849年 .
varchar需要额外的存储空间来获取长度信息
比较和排序需要整理处理
由于排序规则,
varchar可能无法跨系统匹配
int给出40亿行,bigint(8字节)给出18万亿行
pre-bigint,我见过十进制(19,0),它也提供了18万亿行
使用varchar会以泪水结束......
要明确的是:你正在开发一个可能有超过40亿行的系统(你 don't know ),有复制,你 don't know 你知道什么是varchar与整数有什么不同?