Possible Duplicate:
07000
我知道包含10个字符的VARCHAR(200)列占用的空间与包含相同数据的VARCHAR(20)列相同.
我想知道将特定表的十二个VARCHAR(200)列更改为VARCHAR(20)是否会使查询运行得更快,尤其是在以下情况下:
>这些列永远不会包含超过20个字符
>这些列通常用于ORDER BY子句中
>这些列通常用于WHERE子句中
>对其中一些列进行索引,以便可以在WHERE子句中使用它们
解决方法
是的,varchar的长度会影响查询的估计,将分配给内部操作的内存(例如用于排序)以及cpu的资源.您可以使用以下简单示例重现它.
1.创建两个表:
create table varLenTest1 ( a varchar(100) ) create table varLenTest2 ( a varchar(8000) )
2.用两些数据填写它们:
declare @i int set @i = 20000 while (@i > 0) begin insert into varLenTest1 (a) values (cast(NEWID() as varchar(36))) set @i = @i - 1 end
3.使用“包含实际执行计划”执行以下查询:
select a from varLenTest1 order by a OPTION (MAXDOP 1) ; select a from varLenTest2 order by a OPTION (MAXDOP 1) ;