一尘不染

INT和VARCHAR主键之间在真实性能上有区别吗?

mysql

在MySQL中使用INT与VARCHAR作为主键之间是否存在可测量的性能差异?我想将VARCHAR用作参考列表的主键(想想美国国家/地区代码),并且同事不会花INT
AUTO_INCREMENT作为所有表的主键。

我的论点(在这里详细介绍)是INT和VARCHAR之间的性能差异可以忽略不计,因为每个INT外键引用都需要JOIN才能使引用有意义,所以VARCHAR键将直接呈现信息。

那么,是否有人对这个特定用例及其相关的性能问题有经验?


阅读 433

收藏
2020-05-17

共1个答案

一尘不染

您指出,可以通过使用 自然键 而不是
代理键

来避免一些联接查询。只有您可以评估这样做的好处在您的应用程序中是否很重要。

也就是说,您可以测量应用程序中最重要的查询,因为它们要处理大量数据或执行得非常频繁,因此它们对于提高查询速度至关重要。如果这些查询从消除联接中受益,并且不因使用varchar主键而受苦,则可以这样做。

不要对数据库中的所有表都使用这两种策略。在某些情况下,自然键可能会更好,但在其他情况下,替代键会更好。

其他人指出,在实践中,很少有自然密钥永远不会更改或具有重复项,因此代理密钥通常是值得的。

2020-05-17