Mysql 有人有足够的证据证明CHAR比VARCHAR快吗?

Mysql 有人有足够的证据证明CHAR比VARCHAR快吗?,mysql,char,varchar,benchmarking,Mysql,Char,Varchar,Benchmarking,任何基准、图表或任何东西?它的所有学术和理论在网络上 好吧,这不是第一次问这个问题,他们都说使用CHAR会导致更快的选择?我甚至读过MySQL的书,都是一样的,但我没有遇到任何基准测试来证明这一点 有人能解释一下吗?我想你应该拿起手套就这么做。这是简单的逻辑,为了简化,我将以CSV文件为例 在这一行搜索会更快吗 1231;231;32345;21312;23435552;1231;1.243;211;3525321;44343112; 还是这个 十二,;23;43;54;56;76;54;83;

任何基准、图表或任何东西?它的所有学术和理论在网络上

好吧,这不是第一次问这个问题,他们都说使用CHAR会导致更快的选择?我甚至读过MySQL的书,都是一样的,但我没有遇到任何基准测试来证明这一点


有人能解释一下吗?

我想你应该拿起手套就这么做。

这是简单的逻辑,为了简化,我将以CSV文件为例

在这一行搜索会更快吗

1231;231;32345;21312;23435552;1231;1.243;211;3525321;44343112;

还是这个

十二,;23;43;54;56;76;54;83;45;91;28;92


只要您正确定义了长度,CHAR应该会更快,因为预定义的格式有助于缩短处理时间。

关键是,它不是。无论如何,它本身不是

然而,如果表中只有固定宽度的字段,MySQL就不需要执行一些计算来找出每个字段的开头


对于非常短的字段,也可能存在差异。如果比较CHAR(1)和VARCHAR(1),后者占用的内存是前者的两倍(在单字节编码中)

CHAR将更快,因为它是固定长度的。 例如CHAR(10)和VARCHAR(10) CHAR(10)是一个固定长度的字符串10,而VARCHAR是一个可变长度的字符串,最大长度为10

VARCHAR(10)

CHAR(10)

假设你有一个有1000000条记录的表,你需要得到一条偏移量为500000的记录

CHAR-数据库引擎必须执行乘法500000 x 10=偏移量为5000000

VARCHAR-数据库引擎必须获得每一行的长度,并将它们相加5+8+9+3+2+4…500000次才能得到偏移量

字符填充是x00,它基本上是字符串的结尾,所以
字符(10)=[A,A,A,00,00,00,00,00,00]“aaaaaa”

因此,如果您所说的是真的,那么使用字符的速度不会真正提高,除非,例如,“全名字符(20)”列的所有全名都精确填充了20个字符的相关数据。对吗?或者这是自动发生的,因为死空间被添加为这些列上的轨迹?空间被添加了,所以它总是正好是20。这就是它更快的原因。请注意,这仅适用于行中所有字段都是固定宽度的情况。要使示例在具有可变长度字符串时准确,必须为字符表示大量空白字符。在这种情况下,varchar实际上更容易阅读。我们又遇到了一个奇妙的矛盾:)“在这种情况下,varchar实际上更容易阅读。”事实并非如此,除非你有固定长度的字符串,否则char会更快。不,等一下,char本质上不能有可变长度,由于其余部分只是字符串的一部分,只是空白,我认为“除非”部分在这里不适用,因为它已经固定了
 {Index} (Length) [String]
 -------------------------
 {0} (8) [AAAAAAAA]
 {1} (5) [BBBBB]
 {2} (3) [CCC]
 {3} (7) [DDDDDDD]
 {4} (2) [EE]
 {5} (4) [FFFF]
 {Index} (Length) [String]
 -------------------------
 {0} (10) [AAAAAAAA  ]
 {1} (10) [BBBBB     ]
 {2} (10) [CCC       ]
 {3} (10) [DDDDDDD   ]
 {4} (10) [EE        ]
 {5} (10) [FFFF      ]