我的一位朋友声称,在典型的数据库中,由于页面分配的粒度,使用(例如)nvarchar[256]
会比nvarchar[200]
或nvarchar[250]
略微提高性能。< / p>
这有什么道理吗?
谢谢!
答案 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有一些非常先进的优化。我很确定他们也有所有简单的。