关于SQL Server 2008中变量定义的问题
如某表中有个字段field类型为varchar(50),在写脚本时申明一个变量DECLARE@Fieldasvarchar(128),然后SET@Field=‘123’,...
如某表中有个字段field类型为varchar(50),在写脚本时申明一个变量DECLARE @Field as varchar(128),然后SET @Field = ‘123’,变量的长度没有超过字段的长度,可是变量申明时的长度128>50,这会不会在性能、内存上面造成影响,会造成什么影响?
展开
2个回答
展开全部
这个问题我也在纳闷。不过你的变量的长度并没有超过字段的长度,虽然看似浪费内存,不过,在你数据库里面的数据量不多是时候这些都可以忽略不计的,性能上内存上影响不大,毕竟这不是一个关键性问题,在很多数据处理方面总会碰到这个问题,公司设计的时候也是这么处理的,所以我猜测,128和50并没有什么大问题,希望对你有所帮助
追问
谢谢,我是这么想的:因为申明了变量长度为128,因此内存会为它开辟128个大小的空间,但是实际只用到50,那么128大小的空间实际有78没用,那是不是就造成了浪费了?
追答
对,我懂你意思。不过这无关紧要的,那你想想,你开辟的50你全用到了吗?
展开全部
数据库中的变量定义是不会事先开辟内存的,就像程序中的变量要实例化才回去分配空间
假如定义时就分配的话,那么在同一个存储过程中定义多个varchar(max)--2GB
那服务器直接挂了~
而且像varchar这种变长类型,只会分配录入长度的空间,不会把空间全部分配出来
而想char这种定长类型则会全部分配长度空间
变量在存储过程中的生命周期可谓是稍纵即逝,存储过程如果要执行个几十分钟那就要疯掉了(不过有的公司需要大数据量存储的话可能会这样)
假如定义时就分配的话,那么在同一个存储过程中定义多个varchar(max)--2GB
那服务器直接挂了~
而且像varchar这种变长类型,只会分配录入长度的空间,不会把空间全部分配出来
而想char这种定长类型则会全部分配长度空间
变量在存储过程中的生命周期可谓是稍纵即逝,存储过程如果要执行个几十分钟那就要疯掉了(不过有的公司需要大数据量存储的话可能会这样)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询