由MySQL中char跟varchar效率想到的

由MySQL中char和varchar效率想到的

对比char和varchar随便在google或百度中搜一下得到的结论大概都是”char定长,varchar不定长,char要比varchar占用更多的空间,由于定长char的效率高于varchar,char最大255,varchar最大65536″更高级一点的数据是”char在存入和取出的时候,会自动把末尾的空格去掉,varchar会额外的多用1-2个字节来存放字符长度,列中有一个varchar会自动把char转换成varchar,而当varchar长度小于4时,自动的把varchar转换成char…”

一般认为空间换时间,现在磁盘又大又不值钱!

当使用全表都是char这的字段的时候,那么表属性Row_format是Fixed也就是静态表,与之对应的自然就是动态表Dynamic,静态表比动态表效率要高,主要是因为,基于两点:

1)没有碎片,每行的长度是固定,所以在频繁更新的场景下,尤其是某个字段由小变大.

2)方便数据文件指针的操作,在myisam中有一个数据文件指针的概念,是用来指向数据文件,比如在索引中指向数据文件.静态表的偏移量的固定不变的,而在动态表中每行的数据长度大小不一,就可能导致数据更多的开销

基于以上两点,所以静态表在查询,修改拥有较大优势,但是这个优势也是有适用场景的.

首先猜想char由于每次存取都会自动的削掉末尾的空格,而且数据文件也大,所以会使用更多的cpu和内存资源,尤其在取的时候,要是长短差距较大的时候,还是会很浪费操作的.

其次验证想法,首先测试插入性能,建了2张表并调用sp分别插入200W的数据

CREATE TABLE `isam_char` (?
??`content` char(255) NOT NULL?
) ENGINE=MyISAM??DEFAULT CHARSET=utf8;

CREATE TABLE `isam_vc` (?
<span style="font-size: 14px; line-height: 22.383333206176758

由MySQL中char跟varchar效率想到的

相关文章:

你感兴趣的文章:

标签云: