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

时间:2010-08-04 19:06:48

标签: mysql char varchar benchmarking

任何基准测试,根本没有图表?它在网络上的所有学术和理论。

好吧,这不是第一次提出这个问题,他们都说使用CHAR会导致更快的选择吗?我甚至在MySQL书籍中读到过它,但我没有遇到任何可以证明这一点的基准。

任何人都可以对此有所了解吗?

4 个答案:

答案 0 :(得分:5)

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

在此行中搜索会更快

1231; 231; 32345; 21312; 23435552; 1231; 1; 243; 211; 3525321; 44343112;

或者这个

12; 23; 43; 54; 56; 76; 54; 83; 45; 91; 28; 92

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

答案 1 :(得分:5)

重点是,事实并非如此。反正不是单独的。

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

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

答案 2 :(得分:0)

我猜你应该拿起手套然后去做。

答案 3 :(得分:0)

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

VARCHAR(10)

 {Index} (Length) [String]
 -------------------------
 {0} (8) [AAAAAAAA]
 {1} (5) [BBBBB]
 {2} (3) [CCC]
 {3} (7) [DDDDDDD]
 {4} (2) [EE]
 {5} (4) [FFFF]

CHAR(10)

 {Index} (Length) [String]
 -------------------------
 {0} (10) [AAAAAAAA  ]
 {1} (10) [BBBBB     ]
 {2} (10) [CCC       ]
 {3} (10) [DDDDDDD   ]
 {4} (10) [EE        ]
 {5} (10) [FFFF      ]

因此,假设您有一个包含1,000,000条记录的表,并且您需要获取偏移量为500,000的记录。

CHAR -数据库引擎必须乘以 500,000 x 10 =偏移量为5,000,000。

VARCHAR -数据库引擎将必须获取每一行的长度并将其总和 5 + 8 + 9 + 3 + 2 + 4 ... 500,000次才能获得偏移

CHAR填充为x00,基本上是字符串的结尾,因此 CHAR(10)= [A,A,A,A,A,00,00,00,00,00] “ AAAAA”