11

如果我知道存储在 MySQL 中的值总是正好是 32 个字符,那么使用列类型CHAR而不是更好的性能VARCHAR?使用 VARCHAR 和 CHAR 之间的性能差异究竟是什么?

谢谢。

4

4 回答 4

8

我会用CHAR.

如果您有可能在该列进行搜索,则CHAR提供了一个小的性能升级VARCHAR

由于您的数据大小将被固定,因此使用 没有缺点CHAR,因为VARCHAR等效项将存储一到两个字节作为前缀。

参考:MySQL CHAR 与 VARCHAR

于 2012-05-10T01:03:23.707 回答
7

您的第一个问题的答案是“将列类型设置为 CHAR 而不是 VARCHAR 是否性能更好?”......是的。确实。

如果您总是知道长度将是 32,那么您绝对应该使用 CHAR。

这里也给出了几个很好的答案: 为什么我会在 SQL 中选择 CHAR 而不是 VARCHAR?

于 2012-05-10T01:05:01.657 回答
3

VARCHAR 列使用一个或两个字节的前缀来存储长度

与 CHAR 相比,VARCHAR 值存储为一个字节或两个字节长度的前缀加上数据。长度前缀表示值中的字节数。如果值需要不超过 255 个字节,则一列使用一个长度字节,如果值可能需要超过 255 个字节,则使用两个长度字节。

因此,一个 VARCHAR 列会稍微大一些。如果您知道它总是正好是 32 个字符,那么 CHAR 似乎是合理的。在几乎任何你不完全确定长度的情况下,我都会选择 VARCHAR。

于 2012-05-10T00:59:58.037 回答
0

如果字符串总是 32 个字符(可能你有一个 md5 哈希)然后去 Char(32) 你总是可以对任何表运行这个脚本,看看 mysql 说什么

SELECT * FROM table PROCEDURE ANALYSE();

这将分析您的整个行并为您提供一些建议。仅当您的表中有一个不错的数字或行时才能正常工作。

于 2015-09-04T00:29:23.583 回答