在SQL Server 2008中使用varchar的速度影响


9

在过去,使用varcharover char是一个很大的问题,因为over varchar存储在与该行其余部分不同的页面上。如今,SQL Server 2008还是这样吗?我会看到将1-3 varchar(5)列更改为char(5)表中的列会获得任何内存/性能提升吗?

a)说2.000.000行b)如果任何varchar列是索引/主键的一部分


2
问题的可能重复项太长的字段(varchar / nvarchar)如何影响性能和磁盘使用率?(MSSQL Server 2008)。如果您认为它不是重复的,那么绝对也可以在那里找到一些答案。
玛丽安

Answers:


8

您正在将text / varchar(max)(LOB类型)与varchar(n)/ char(n)混淆

否则,如果使用char(1000)而不是varchar(1000),并且平均数据长度为42,则这是错误的设计,并且浪费了大量空间。


在DB2和其他一些DB引擎下,char和varchar的存储方式不同,并且有关DB2的一些建议已转移到SQL Server。
安德鲁·比克顿

@Andrew比克顿:又一个神话......
GBN

你能指出我那个神话被揭穿的方向吗?(我同意,该建议不适用于SQL Server)
Andrew Bickerton

我还指的是DB2的原始版本之一(在最近的10年中可能不是这样),类似于SQL 2000的建议,即由于性能问题仍然存在,PK应该不成簇-尽管不再是真实的
安德鲁·比克顿

@Andrew Bickerton:只需看看SQL Server的磁盘结构(我有几个SO答案)stackoverflow.com/search?q=user%3A27535+anatomy。对不起,我延迟回复
-gbn

3

在不了解您的架构的情况下很难告诉您特定的性能提升或命中率,但是总的来说,您需要定义数据类型以匹配您的数据。如果需要固定宽度(例如,您将知道始终有五个字符),则应使用char(5)。如果数据量可变,则应使用varchar(5)。

对于SQL,页面上可以容纳的数据越多,性能就越好。


3

据我所知,SQL Server从未将varchar或nvarchar数据类型存储在行外。文字和NText不同。对于可变宽度列,存储了额外的几位,仅此而已。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.