在 MySQL 中使用 INT 与 VARCHAR 作为主键之间是否存在可测量的性能差异?我想使用 VARCHAR 作为参考列表的主键(想想美国各州、国家/地区代码),并且同事不会将 INT AUTO_INCREMENT 作为所有表的主键。
正如这里所详述的,我的论点是 INT 和 VARCHAR 之间的性能差异可以忽略不计,因为每个 INT 外键引用都需要 JOIN 才能理解引用,VARCHAR 键将直接呈现信息。
那么,是否有人对这个特定的用例以及与之相关的性能问题有经验?
您提出了一个很好的观点,您可以通过使用所谓的自然键 而不是 代理键 来避免一些连接查询。只有您可以评估这样做的好处在您的应用程序中是否显着。
也就是说,您可以测量应用程序中对速度最重要的查询,因为它们处理大量数据或执行非常频繁。如果这些查询受益于消除连接,并且不会因使用 varchar 主键而受到影响,那么就这样做。
不要对数据库中的所有表使用任何一种策略。在某些情况下,自然键可能更好,但在其他情况下,代理键更好。
其他人提出了一个很好的观点,即在实践中自然键很少更改或重复,因此代理键通常是值得的。