数据库可变长度文本字段应该是2的幂吗?

时间:2008-10-17 14:29:23

标签: database database-design

我的一位朋友声称,在典型的数据库中,由于页面分配的粒度,使用(例如)nvarchar[256]会比nvarchar[200]nvarchar[250]略微提高性能。< / p>

这有什么道理吗?

谢谢!

5 个答案:

答案 0 :(得分:16)

事实并非如此。表以8k页的形式分配在磁盘上。从磁盘读取表时,将在一个IO操作中读取整个页面并将其存储在内存中。因此,列的长度根本不会影响内存对齐。实际上,对于非可变长度数据类型,更短的肯定更好:nchar(200)列将允许每页比nchar(256)列更多的行。这允许每个物理IO读取更多行,这可能会对数据库性能产生 戏剧性 影响。

答案 1 :(得分:5)

不,没有。

答案 2 :(得分:5)

如果由于分配开销可能会更糟糕。当您分配nvarchar(256)时,数据库可能包含几个字节的长度,因此存储要求实际上可能是258。

这里有很多层次的抽象,你不会看到任何好处,试图在顶部进行优化,只做最底层的事情,你可能会让事情变得更糟!

答案 3 :(得分:1)

我想知道你的朋友是否以他/她自己的方式得出了他的结论,或者这是神话传播的情况。

Tom Kyte在“你知道的事情”上有一个很棒的演讲,几乎每个人都应该在做出如上所述的声明之前看到:Things you know

答案 4 :(得分:1)

这样想: 如果nvarchar [256]的性能优于nvarchar [200],那么当你要求nvarchar [200]时,DBMS不会只生成一个nvarchar [256]吗? (但仍然让它看起来像nvarchar [200])

良好的DBMS有一些非常先进的优化。我很确定他们也有所有简单的。