我正在构建一个数据库,并希望将VARCHAR用作某些表的ID /主键,因此它更加用户友好。我知道历史上存在系统限制/减速,所以使用尽可能小的数据类型是很好的做法。
使用当前的系统硬件,这有变化吗?我的意思是,我们是否仍然应该使用小数据类型或者这是过去的事情吗?
谢谢,
它不是世界末日。但由于以下原因,VARCHAR()
不鼓励使用主键:
我建议使用自动递增的主键,在varchar()
列上使用唯一索引,并使用主键使用所有外部引用。
考虑@ GordonLinoff的补充答案。
虽然您所陈述的字符串索引的示例是合理的,但您应该知道:
VARCHAR(X)
相当于索引CHAR(X)
,因为索引中的条目是不变的。因此,如果要索引utf8mb4 VARCHAR(255)
列,每个条目将需要大约1kB的索引空间/内存。 [受key length constraints的影响,可能多于或少于此。]
一个并不比另一个更好,因为你需要做出权衡。代理键可以使索引大小保持较小,但需要额外的应用程序逻辑。自然键使用起来更自然,但通常需要更多的索引空间。