当前位置: 首页 > 面试题库 >

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

穆建元
2023-03-14
问题内容

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

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

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


问题答案:

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

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

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

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

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



 类似资料:
  • 问题内容: 我在一本书中遇到了以下SQL: 我想知道为什么在同一张表中需要一个PRIMARY和UNIQUE KEY?我想,这个问题的根源在于,PRIMARY和UNIQUE键之间有什么区别? 问题答案: 关系模型说,一个键和另一个键之间没有本质区别。也就是说,当一个关系具有多个候选键时,没有理论上的理由声明 该 键比 该 键更重要。从本质上讲,这意味着没有理论上的理由将一个键标识 为主键 ,而将所有

  • 本文向大家介绍主键和唯一键之间的区别,包括了主键和唯一键之间的区别的使用技巧和注意事项,需要的朋友参考一下 主键和唯一键都用于从表中获取记录。这些键还用于创建表之间的关系。主键和唯一键都用于唯一标识表中的记录。一个表只能有一个主键,而唯一键在一个表或关系中可以是多个。 以下是主键和唯一键之间的重要区别。 序号 键 首要的关键 唯一键 1 定义 主键用于唯一标识关系中的所有记录。 唯一键还用于唯一标

  • 本文向大家介绍主键和候选键之间的区别,包括了主键和候选键之间的区别的使用技巧和注意事项,需要的朋友参考一下 主键和候选键都用于从表中获取记录。这些键还用于创建表之间的关系。主键和候选键都用于唯一标识表中的记录。 以下是主键和候选键之间的重要区别。 序号 键 首要的关键 候选键 1 定义 主键是唯一且非空的键,可唯一标识表中的记录。一个表只能有一个主键。 候选键也是唯一标识表中记录的唯一键,但是一个

  • 问题内容: 这个问题已经在这里有了答案 : MySQL中的VARCHAR vs TEXT (3个答案) 3个月前关闭。 当我们在MySQL中创建带有列的表时,我们必须为其设置长度。但是对于类型,我们不必提供长度。 和之间有什么区别? 问题答案: TL; DR 固定的最大大小为65535个字符(您不能限制最大大小) 占用2 + 字节的磁盘空间,其中是存储的字符串的长度。 不能(完全)成为索引的一部分

  • 本文向大家介绍数据库中主键和外键之间的区别,包括了数据库中主键和外键之间的区别的使用技巧和注意事项,需要的朋友参考一下 在关系数据库中,键是维护两个表之间的关系或从表中唯一标识数据的最重要元素。主键用于唯一地标识数据,因此两行不能具有相同的主键。不能为空。 另一方面,外键用于维护两个表之间的关系。一个表的主表充当另一个表中的伪造键。表中的外键强制引用完整性。该表中可以有多个。 序号 键 首要的关键

  • 问题内容: 两者之间有什么明显的区别 和 问题答案: 它们仅在处理空值时有明显的区别。 这是因为是原始数据类型不能为其分配null,而它的包装器类 可以接受null。 因此,如果column可为空并且您用于 映射实体对象,则对于null 的记录, 将发生错误,因为 无法存储null。