34,594
社区成员
发帖
与我相关
我的任务
分享
0)
DECLARE @str varchar(MAX)
SET @str = REPLICATE('*',8003)
SELECT LEN(@str)
1)
--------------------
8000
(1 row(s) affected)
设置为varchar(8000)的话容易产生不可利用的空闲磁盘块儿,这不太经济!
大量不可利用的空闲磁盘块儿加剧数据的分散存储,在一定程度上影响了数据库各方面的性能!
【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