在我的公司,我们有一个包含各种表格的遗留数据库,因此有很多很多领域。
许多字段似乎都有很大的限制(例如:NVARCHAR(MAX)
)从未到达。
是否任意地使字段的最大宽度或比正常输入的字段大2到3倍会对性能产生负面影响?
如何平衡字段长度的性能?有余额吗?
答案 0 :(得分:7)
这个问题分为两部分:
使用NVARCHAR over VARCHAR是否会影响性能?是的,在unicode字段中存储数据会使存储要求翻倍。存储在这些字段中的数据是其所需大小的2倍(直到SQL Server 2008 R2出现,包括unicode compression。您的表扫描将花费两倍的时间,只有一半的数据可以存储在内存中在缓冲区缓存中。
使用MAX是否会影响性能?不是直接,但是当你使用VARCHAR(MAX),NVARCHAR(MAX)和那些类型的字段时,如果你需要索引表,你将无法在SQL Server 2005/2008 /中在线重建这些索引R2。 (Denali在带有MAX字段的表周围带来了一些改进,因此可以在线重建一些索引。)
答案 1 :(得分:2)
是的,查询优化器可以猜测页面中有多少行,如果你有大量varchar
字段大于必要,SQL Server可以在内部猜出错误的行数。