我刚遇到一个数据库,其中所有基于字符的列的大小都以8的倍数指定(例如,Username = varchar(32),Forename = nvarchar(128)等。)这会对数据库的性能还是完全没有意义?
感谢。
N.B。这是在SQL 2000数据库中。
答案 0 :(得分:6)
由于它们是VARchars,因此使用的实际空间基于内容。如果他们是CHAR,我会开始担心。
-Edoode
答案 1 :(得分:4)
这可能只是一些老学校开发人员的习惯。正如所说 - varchar只要它需要,所以当字符串长度为22时,32或33无关紧要。
答案 2 :(得分:4)
“这会对数据库的性能产生影响还是完全没有意义?”
它对性能影响不大(不是没有,但很少)。它会对备用空间分配产生影响,因为使用此方案,“最大”行大小可能非常大。每页很少的行可以减慢大型表的检索速度。
然而,与不正确的索引相比,差异通常是微观的。让尺寸“正确”并不值得花时间。在过去,老派DBA对每个角色都感到满头大汗。以前的磁盘价格昂贵,每个字节都会对成本产生真正的影响。
现在磁盘非常便宜,DBA浪费时间大大超过了磁盘的成本。
答案 3 :(得分:1)
我从未见过它在表存储,连接或基本操作方面有所作为。
但我发现在涉及字符串处理的情况下会有所不同。
在SQL Server 2005中,我见过的唯一一个varchar大小存在显着差异的情况是将事物转换为varchar(MAX)或UDF。似乎存在一些差异 - 例如,我有一个系统/进程,我正在移植一些关键列,这些关键列必须连接成另一个伪关键字段(直到我能够重构这种可憎的)并且查询执行得更好,在中间CTE或嵌套查询中尽快将结果转换为varchar(45)。
我已经看过UDF采取和返回varchar(MAX)的情况比采用和返回varchar(50)的情况要差得多。例如,修剪或填充功能,某人(也许是我!)试图进行未来证明。 varchar(MAX)有它的位置,但根据我的经验,它可能对性能有害。
我认为我没有描述varchar(50)和varchar(1000)之间的区别。
答案 4 :(得分:0)
看起来对我来说过早优化。
我认为这不会对数据库进行任何性能更改。
答案 5 :(得分:0)
如果它们都是5或10的倍数,你会有同样的担忧吗,这是正常情况下会发生的情况。?