码迷,mamicode.com
首页 > 其他好文 > 详细

Char和Varchar查询速度、存储空间比较详解(转)

时间:2016-05-20 00:42:42      阅读:157      评论:0      收藏:0      [点我收藏+]

标签:

转:http://tech.diannaodian.com/dw/data/sql/2011/1005/135572.html

一、数据行结构

1、char(n): 系统分配n个字节给此字段,不管字段实际长度(后边用空格补齐)

2、varchar(n): 假设表中有M个varchar(或者nvarchar)类型的字段

先分配两个字节(用来表示M)

再分配2*M个字节(表示各变长行的偏移)

此后字段值有多长,就分配多长

二、varchar(n)一定比char(n)节省空间么?

不一定。

我见过这样的设计: varchar(3)

就算此字段为空,也还是比char(3)多用一个字节。

还有这样的设计: user_ip varchar(16).

对于这种数据长度变化不大的字段,用varchar只能浪费空间

结论: varchar适用于数据值长度不太短,且长度变化较大的字段

三、char(n)一定比varchar(n)速度快么?

不一定

计算varchar的偏移是会花去一些cpu时间,但性能瓶颈不在此,在io.

db的io单位是数据页(8192字节)(一页存有多个数据行,数据行不能跨页。当然image,text等例外).

因此一页中行越多,性能越好。这样就又归结到前边的问题了

遗留问题:对于频繁更新的表,varchar是否会导致分页等问题?影响程度

在检索上,就算不考虑索引,char是定长的,移动到下一条记录,只需要做固定长度的指针偏移即可。varchar则必须根据当前记录的长度算出下一个数据指针的偏移。

 

Char和Varchar查询速度、存储空间比较详解(转)

标签:

原文地址:http://www.cnblogs.com/shixm/p/5510615.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!