Mysql 中外键类型的性能影响
Performance impact of foreign key type in Mysql
我们有两种类型的外键:
1 - 由两个无符号整数字段组成的外键(最常见)
2 - 由两个 varchar 字段组成的外键
问题:使用 varchar FK 会对性能产生负面影响吗?如果是,在什么程度上?如果有人对此也有任何官方消息来源,我将不胜感激
在其他条件相同的情况下,一个好的经验法则是至少出于两个原因更喜欢 INTEGER 键:
- 它们通常更快。对于 VARCHAR,在处理归类等方面通常会出现性能损失。
- 出错的几率较小。例如,“cat”、“CaT”和“cAT”都将被视为与默认排序规则相同,默认排序规则不区分大小写。
也就是说,有时使用 VARCHAR primary/foreign 键会更方便。不过,这完全取决于具体情况。
至于性能影响,请记住,在大多数情况下,差异可以忽略不计。但是如果你真的需要找到最快的解决方案,有很多事情需要考虑:
- 这些 VARCHAR 值有多大?像“abc”这样的值是一回事,但是“SomethingVeryLongHere124511234513412352345234”;
- 与内存缓存相比,数据库需要多久从磁盘检索一次数据;
- 如果您使用“人工”INTEGER 键,这可能意味着额外级别的规范化,这有时可能有助于提高性能,但也可能使情况变得更糟,因为需要额外查找字符串值 (如果那是您无论如何都需要阅读的内容);
- 等等
差异很小。
不要特意切换到不需要的 INT
。开销会耗尽所有的积蓄。
我们有两种类型的外键:
1 - 由两个无符号整数字段组成的外键(最常见) 2 - 由两个 varchar 字段组成的外键
问题:使用 varchar FK 会对性能产生负面影响吗?如果是,在什么程度上?如果有人对此也有任何官方消息来源,我将不胜感激
在其他条件相同的情况下,一个好的经验法则是至少出于两个原因更喜欢 INTEGER 键:
- 它们通常更快。对于 VARCHAR,在处理归类等方面通常会出现性能损失。
- 出错的几率较小。例如,“cat”、“CaT”和“cAT”都将被视为与默认排序规则相同,默认排序规则不区分大小写。
也就是说,有时使用 VARCHAR primary/foreign 键会更方便。不过,这完全取决于具体情况。
至于性能影响,请记住,在大多数情况下,差异可以忽略不计。但是如果你真的需要找到最快的解决方案,有很多事情需要考虑:
- 这些 VARCHAR 值有多大?像“abc”这样的值是一回事,但是“SomethingVeryLongHere124511234513412352345234”;
- 与内存缓存相比,数据库需要多久从磁盘检索一次数据;
- 如果您使用“人工”INTEGER 键,这可能意味着额外级别的规范化,这有时可能有助于提高性能,但也可能使情况变得更糟,因为需要额外查找字符串值 (如果那是您无论如何都需要阅读的内容);
- 等等
差异很小。
不要特意切换到不需要的 INT
。开销会耗尽所有的积蓄。