在查询中不使用时的VARCHAR列事情大小[复制](Does size of a VARCHAR c

2019-07-05 10:31发布

可能重复:
有超过VARCHAR(8000)为varchar(500)的优势在哪里?

据我所知, VARCHAR(200)包含10个字符列占据的空间相同量作为VARCHAR(20)含有相同的数据列。

我想知道,如果改变了十几个VARCHAR(200)特定表的列VARCHAR(20)将使查询运行速度快,特别是当:

  • 这些列将永远不会超过20个字符
  • 这些柱通常在使用ORDER BY子句
  • 这些列在经常使用的WHERE子句
    • 一些列的被索引,以便它们可以用在WHERE子句

PS:我使用的SQL Server 2000,但很快就要升级到更高版本的SQL随时随地的。

Answer 1:

是的,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) ;

如果你检查这些查询的执行计划,你可以看到,估计IO成本,估计CPU成本有很大的不同:



Answer 2:

这里有一个博客帖子是在解释什么情况下,为什么使用不同的列大小(以测试和技术细节)时,有性能差异:

高级TSQL调整:为什么内幕知识事项



Answer 3:

的确很重要的查询优化器时,它会评估执行查询的最佳查询路径。 当一个以上的路径将是可用的,它会计算基于您的查询,并从这些一个I / O成本等各种参数,选择了会出现他作为成本最低的一个。

这不是一个绝对的计算,它只是一个近似的过程。 因此,它可以很容易被甩出,如果从内存中的一个表操作记录所需的表观平均规模要更大然后将真的有必要什么,并根据它认为会是必要的可能选择少执行路径优化器对于其他的路径。

有一个现实的最大尺寸也有用到任何其他的程序员会一起去寻找你的代码。 如果我有,我想在GUI中显示一个变量,我可能会,如果我看到,是由像为nvarchar(200)或nvarchar(2000)的支持,如果它的大小是分配的,而不是为nvarchar(20)比neededd更多的空间从来没有大于。



Answer 4:

大小事项

始终使用的数据量最小,可容纳最大可能值。 如果列是要1和5之间存储值,可以使用TINYINT不是int的。

这一规则也适用于字符列。 较小的数据大小,少说也有是读取,所以性能,在全部好处。 此外,更小的尺寸减少网络流量。 随着新技术,这个提示似乎不太相关,但不排除它不可收拾。 你会不会后悔是从一开始就有效。

欲了解更多信息请访问http://www.techrepublic.com/blog/10-things/10-plus-tips-for-getting-the-best-performance-out-of-your-sql-server-data-types/



文章来源: Does size of a VARCHAR column matter when used in queries [duplicate]