在MySQL中使用INT和VARCHAR作为主键之间是否存在可测量的性能差异?我想使用VARCHAR作为参考列表的主键(想想美国的州、国家代码),同事不会将INT AUTO_增量作为所有表的主键.
我的论点(详见第here条)是,INT和VARCHAR之间的性能差异可以忽略不计,因 for each INT外键引用都需要一个连接来理解引用,VARCHAR键将直接显示信息.
那么,有没有人对这个特定用例以及与之相关的性能问题有经验?
在MySQL中使用INT和VARCHAR作为主键之间是否存在可测量的性能差异?我想使用VARCHAR作为参考列表的主键(想想美国的州、国家代码),同事不会将INT AUTO_增量作为所有表的主键.
我的论点(详见第here条)是,INT和VARCHAR之间的性能差异可以忽略不计,因 for each INT外键引用都需要一个连接来理解引用,VARCHAR键将直接显示信息.
那么,有没有人对这个特定用例以及与之相关的性能问题有经验?
很明显,通过使用所谓的natural key而不是surrogate key,可以避免一些连接查询.只有您可以判断这在您的应用程序中是否具有重要意义.
也就是说,您可以测量应用程序中最重要的查询,因为它们处理大量数据,或者执行非常频繁.如果这些查询从消除连接中受益,并且使用varchar主键时不会受到影响,那么就这样做.
不要对数据库中的所有表使用这两种策略.在某些情况下,自然密钥可能更好,但在其他情况下,代理密钥更好.
其他人则认为,在实践中,自然密钥很少会发生变化或重复,所以代理密钥通常是值得的.