Mysql 中外键类型的性能影响

Performance impact of foreign key type in Mysql

我们有两种类型的外键:

1 - 由两个无符号整数字段组成的外键(最常见) 2 - 由两个 varchar 字段组成的外键

问题:使用 varchar FK 会对性能产生负面影响吗?如果是,在什么程度上?如果有人对此也有任何官方消息来源,我将不胜感激

在其他条件相同的情况下,一个好的经验法则是至少出于两个原因更喜欢 INTEGER 键:

  1. 它们通常更快。对于 VARCHAR,在处理归类等方面通常会出现性能损失。
  2. 出错的几率较小。例如,“cat”、“CaT”和“cAT”都将被视为与默认排序规则相同,默认排序规则不区分大小写。

也就是说,有时使用 VARCHAR primary/foreign 键会更方便。不过,这完全取决于具体情况。

至于性能影响,请记住,在大多数情况下,差异可以忽略不计。但是如果你真的需要找到最快的解决方案,有很多事情需要考虑:

  • 这些 VARCHAR 值有多大?像“abc”这样的值是一回事,但是“SomethingVeryLongHere124511234513412352345234”;
  • 与内存缓存相比,数据库需要多久从磁盘检索一次数据;
  • 如果您使用“人工”INTEGER 键,这可能意味着额外级别的规范化,这有时可能有助于提高性能,但也可能使情况变得更糟,因为需要额外查找字符串值 (如果那是您无论如何都需要阅读的内容);
  • 等等

差异很小。

不要特意切换到不需要的 INT。开销会耗尽所有的积蓄。