任何基准测试,根本没有图表?它在网络上的所有学术和理论。
好吧,这不是第一次提出这个问题,他们都说使用CHAR会导致更快的选择吗?我甚至在MySQL书籍中读到过它,但我没有遇到任何可以证明这一点的基准。
任何人都可以对此有所了解吗?
答案 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” 。