在MySQL中,使用INT和VARCHAR作为主键之间是否存在可测量的性能差异?我希望使用VARCHAR作为引用列表的主键(考虑美国国家和国家代码),并且同事不会使用INT AUTO_INCREMENT作为所有表的主键。
正如详细介绍的here一样,我的论点是INT和VARCHAR键之间的性能差异可以忽略不计,因为每个INT外键引用都需要一个连接才能理解引用,VARCHAR键将直接显示信息。
那么,有没有人有过这种特殊用例以及与之相关的性能问题的经验呢?
发布于 2008-12-01 21:30:58
这与性能无关。这是关于什么才是一个好的主键。独一无二且不随时间变化。您可能认为像国家代码这样的实体永远不会随着时间的推移而改变,它将是主键的一个很好的候选者。但痛苦的经验是,这种情况很少发生。
INT AUTO_INCREMENT满足“唯一且不随时间变化”的条件。因此才有了这种偏好。
发布于 2008-12-01 21:33:57
绝对不是。
我做了几个..。有几个。INT、VARCHAR和CHAR之间的性能检查。
具有主键(唯一的和集群的)的1000万记录表具有完全相同的速度和性能(以及子树成本),无论我使用这三种表中的哪一种。
话虽如此..。使用最适合您的应用程序的任何工具。不要担心性能。
发布于 2008-12-01 21:30:09
对于较短的代码,可能没有区别。这一点尤其正确,因为包含这些代码的表可能非常小(最多几千行),并且不会经常更改(何时是我们最后一次添加新的美国州)。
对于键之间有较大变化的较大表,这可能是危险的。例如,考虑使用用户表中的电子邮件地址/用户名。当您有几百万用户,其中一些用户具有长名称或电子邮件地址时,会发生什么情况。现在,任何时候你需要使用这个键连接这个表,它都会变得非常昂贵。
https://stackoverflow.com/questions/332300
复制相似问题