char和varchar在mysql中的效率怎样

char和varchar在mysql中的效率怎样

ID:8966573

大小:37.50 KB

页数:3页

时间:2018-04-13

char和varchar在mysql中的效率怎样_第1页
char和varchar在mysql中的效率怎样_第2页
char和varchar在mysql中的效率怎样_第3页
资源描述:

《char和varchar在mysql中的效率怎样》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、char和varchar在mysql中的效率怎样  char是一种固定长度的类型,varchar则是一种可变长度的类型,它们的区别是:char(M)类型的数据列里,每个值都占用M个字节,如果某个长度小于M,MySQL就会在它的右边用空格字符补足.(在检索操作中那些填补出来的空格字符将被去掉)在varchar(M)类型的数据列里,每个值只占用刚好够用的字节再加上一个用来记录其长度的字节(即总长度为L+1字节)专职优化、域名注册、数据库、网站空间、虚拟主机、服务器托管、vps主机、服务器租用的中国信息港来为你做详细介绍!当使用全表都是ch

2、ar这的字段的时候,那么表属性Row_format是Fixed也就是静态表,与之对应的自然就是动态表Dynamic,静态表比动态表效率要高,主要是因为,基于两点:1)没有碎片,每行的长度是固定,所以在频繁更新的场景下,尤其是某个字段由小变大.2)方便数据文件指针的操作,在myisam中有一个数据文件指针的概念,是用来指向数据文件,比如在索引中指向数据文件.静态表的偏移量的固定不变的,而在动态表中每行的数据长度大小不一,就可能导致数据更多的开销基于以上两点,所以静态表在查询,修改拥有较大优势,但是这个优势也是有适用场景的.首先猜想cha

3、r由于每次存取都会自动的削掉末尾的空格,而且数据文件也大,所以会使用更多的cpu和内存资源,尤其在取的时候,要是长短差距较大的时候,还是会很浪费操作的.其次验证想法,首先测试插入性能,建了2张表并调用sp分别插入200W的数据CREATETABLE`isam_char`( `content`char(255)NOTNULL)ENGINE=MyISAM DEFAULTCHARSET=utf8;CREATETABLE`isam_vc`( `content`varchar(255)NOTNULL)ENGINE=MyISAM DEFAULTC

4、HARSET=utf8;callinsert_isam(2000000,'isam_char');callinsert_isam(2000000,'isam_vc');多次平均isam_char插入200W的数据为138.21s,而isam_vc少了约20s为119.80s,这应该是每次插入的时候,mysql要把char字段填充到255的操作.观察数据文件大小,isam_vc为235.8M而isam_char为1.4G!再测试查询,为了保证两者一致,首先把isam_char中数据删除,再把isam_vc中数据导入isam_char中,

5、无索引,禁闭query_cachetruncatetableisam_char;##观察了下数据文件,被穷空成0insertintoisam_charselect*fromisam_vc;##观察了下数据文件,依然是1.4Gselect*fromisam_charlimit1555555,5;select*fromisam_vclimit1555555,5;依旧多次查询去平均值,isam_char表平均值为10.50s,而isam_vc则为1.51s!再看下创建索引,以及索引的使用情况mysql>createindexindex_ch

6、aronisam_char(content);QueryOK,2000001rowsaffected(2min56.33sec)Records:2000001 Duplicates:0 Warnings:0mysql>createindexindex_vconisam_vc(content);QueryOK,2000001rowsaffected(1min31.98sec)Records:2000001 Duplicates:0 Warnings:0mysql>selectcount(*)fromisam_charwhereconte

7、nt=('iamauperman!iwillbeahero!!');+----------+

8、count(*)

9、+----------+

10、  199669

11、+----------+1rowinset(0.56sec)mysql>selectcount(*)fromisam_vcwherecontent=('iamauperman!iwillbeahero!!');+----------+

12、count(*)

13、+----------+

14、  199669

15、+----------+1rowinset(0.31sec)还是不理想,所以在长度很不

16、固定情况下使用char或静态表是很不理想的事,当然这里做的是全索引扫描,动态表的索引要小于动态表,估计最大的优势是使用索引去找数据和update,为了验证,再次测试update.mysql>updateisam_char

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。