【发布时间】:2008-10-17 14:29:22
【问题描述】:
我的一个朋友声称,在典型的数据库中,由于页面分配的粒度,使用(例如)nvarchar[256] 将比nvarchar[200] 或nvarchar[250] 提供稍好的性能。
这是真的吗?
谢谢!
【问题讨论】:
我的一个朋友声称,在典型的数据库中,由于页面分配的粒度,使用(例如)nvarchar[256] 将比nvarchar[200] 或nvarchar[250] 提供稍好的性能。
这是真的吗?
谢谢!
【问题讨论】:
这不是真的。表在磁盘上以 8k 页分配。从磁盘读取表时,会在一次 IO 操作中读取整个页面并存储在内存中。因此,列的长度根本不会影响内存对齐。事实上,对于非可变长度数据类型,越短肯定越好:与 nchar(256) 列相比,nchar(200) 列每页允许的行数更多。这允许每个物理 IO 读取更多行,这可能会对数据库性能产生剧烈影响。
【讨论】:
不,没有。
【讨论】:
如果有的话,由于分配开销,它可能会更糟。当您分配 nvarchar(256) 时,数据库可能包含几个字节作为长度,因此存储需求实际上可能是 258。
这里有太多的抽象层次在起作用,如果尝试在顶部优化只在底部重要的东西,你不会看到任何好处,而且你可能只会让事情变得更糟!
【讨论】:
我想知道你的朋友是否以某种方式得出了他/她自己的结论,或者这是一个神话传播的案例。
Tom Kyte 关于“你知道的事情”的精彩演讲,几乎每个人都应该在做出上述声明之前观看:Things you know
【讨论】:
这样想: 如果 nvarchar[256] 的性能比 nvarchar[200] 好,那么当您请求 nvarchar[200] 时,DBMS 不会只创建一个 nvarchar[256] 吗? (但仍然让它看起来像 nvarchar[200])
优秀的 DBMS 有一些非常先进的优化。我很确定他们也有所有简单的。
【讨论】: