日期:2014-05-18 浏览次数:20994 次
【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位,如长度超出,数据即不能插入