日期:2014-05-18 浏览次数:20880 次
【IT168技术文档】 本次测试的SQL SERVER 2000 的char 与 varchar。 测试分三组,每次增加插入的行数,脚本如下: CREATE TABLE [dbo].[testchar] ( [a] [int] IDENTITY (1, 1) NOT NULL , [b] [char] (200) COLLATE Chinese_PRC_CI_AS NULL ) ON [PRIMARY] GO CREATE TABLE [dbo].[testvarchar] ( [a] [int] IDENTITY (1, 1) NOT NULL , [b] [varchar] (200) COLLATE Chinese_PRC_CI_AS NULL ) ON [PRIMARY] GO --truncate table testvarchar --truncate table testchar declare @i as int set @i=0 while @i<50000 begin insert into testvarchar values(cast(@i as varchar(200))) set @i=@i+1 if @i=50000 break end declare @i as int set @i=0 while @i<50000 begin insert into testchar values(cast(@i as char(200))) set @i=@i+1 if @i=50000 break end 实验结果: 插入行数 数据类型 Cpu duration 50000 varchar 2359 21203 50000 char 2344 22250 100000 varchar 4156 44500 100000 char 4172 44186 2000000 varchar 8907 89093 2000000 char 9188 96530 两表存储空间比较 Testchar:73.94M Testvarchar:7.94M
------解决方案--------------------
如果 varchar(300) 和 varchar(8000) 都存储相同的字符数,性能上是没有差别的,存储行为上也没有不同。因为它们都有相同的存储结构,两个字节的偏移,两个字节的列数(如果表中所有的列都是 varchar 类型)。区别只在于存储容量上。
大多数的性能比较都集中在 varchar 和 char,varchar 和 varchar(max) 上。还有,行外存储(SQL Server 2005 支持的)。
------解决方案--------------------
SQLServer2005 中数据类型
varchar 长度最大可以到8000
--这是不对的,SQL2005varchar最大长度可到2G字节.
------解决方案--------------------
设置为varchar(8000)的话容易产生不可利用的空闲磁盘块儿,这不太经济! 大量不可利用的空闲磁盘块儿加剧数据的分散存储,在一定程度上影响了数据库各方面的性能!
------解决方案--------------------
0) DECLARE @str varchar(MAX) SET @str = REPLICATE('*',8003) SELECT LEN(@str) 1) -------------------- 8000 (1 row(s) affected)
------解决方案--------------------
通过行结构 可以看到无论你定义的VARCHAR()是多长
只要你插入的实际长度是一样的,那么它就存这么长。
所以没有性能差别
------解决方案--------------------
长度除了存储的原因,更多是管理的需要。如身份证号码21位,如长度超出,数据即不能插入