网站大量收购闲置独家精品文档,联系QQ:2885784924

char和varchar在mysql中的效率怎样.doc

  1. 1、本文档共3页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
char和varchar在mysql中的效率怎样

char和varchar效率?? char是一种固定长度的类型,varchar则是一种可变长度的类型,它们的区别是:char M 类型的数据列里,每个值都占用M个字节,如果某个长度小于M,MySQL就会在它的右边用空格字符补足.(在检索操作中那些填补出来的空格字符将被去掉)在varchar M 类型的数据列里,每个值只占用刚好够用的字节再加上一个用来记录其长度的字节(即总长度为L+1字节)数据库、网站空间、虚拟主机、服务器托管、vps主机、服务器租用的中国信息港来为你做详细介绍! 当使用全表都是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` `content` varchar 255 NOT NULL ENGINE MyISAM? DEFAULT CHARSET utf8; call insert_isam 座机电话号码,isam_char ; call insert_isam 座机电话号码,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中,无索引,禁闭query_cache truncate table isam_char;##观察了下数据文件,被穷空成0 insert into isam_char select * from isam_vc;##观察了下数据文件,依然是1.4G select * from isam_char limit 1555555,5; select * from isam_vc limit 1555555,5; 依旧多次查询去平均值,isam_char表平均值为10.50s,而isam_vc则为1.51s! 再看下创建索引,以及索引的使用情况 mysql create index index_char on isam_char content ; Query OK, 座机电话号码 rows affected 2 min 56.33 sec Records: 座机电话号码? Duplicates: 0? Warnings: 0 mysql create index index_vc on isam_vc content ; Query OK, 座机电话号码 rows affected 1 min 31.98 sec Records: 座机电话号码? Duplicates: 0? Warnings: 0 mysql select count * from isam_char where content iamauperman!iwillbeahero!! ; + mysql select count * from isam_vc where content iamauperman!iwillbeahero!! ; + 还是不理想,所以在长度很不固定情况下使用char或静态表是很不理想的事,当然这里做的是全索引扫描,动态表的索引要小于动态表,估计最大的优势是使用索引去找数据和update,为了验证,再次测试update. mysql update isam_char set content iamauperman!iwillbeahero!!iamauperman!i

文档评论(0)

haocen + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档