2011-07-14 36 views
1

在设计一个关于列应该被声明的顺序的新表时应该考虑到什么?我倾向于首先放置主键,然后是任何外键(通常是替代键整数),其次是其他列,但与同事讨论让我们想知道SQL Server是否会填充我们的数据,可能会使其更快。订购SQL Server列时的性能/空间影响?

为了性能方面的原因(C++编译器在缺省条件下对齐结构的方式),SQL Server会尝试将我们的磁盘(带填充)数据与特定的字节对齐边界对齐吗?还是仅仅分配与我们的总行数需要(可能在行级填充)?即如果我们有一个3字节的char列和另一个类型为bit/tinyint的列,我们可以通过使其中一个跟随另一个在4字节边界对齐来预期服务器的行为(更好或更差)的任何变化吗? SQL Server是否甚至在乎我声明列的顺序,还是可以自由地将它们放在适当位置?

我知道在尝试优化表列的布局之前,可能有一百万件事情应该首先考虑,但出于好奇,我很想知道SQL Server是否关心列排序,以及如果是这样,那么会去哪里(DMV等),看看它是如何将这些行物理地放在磁盘上的。

+0

可能的复制 - http://stackoverflow.com/questions/34818/sql-server-does-column-order-matter – CResults

+0

的可能重复[如何达到每行8060字节和8000(varchar,nvarchar)值的限制?](http://stackoverflow.com/questions/3793022/how-to-come-to-limits-of-8060-bytes-每行和8000每VARCHAR,nvarchar的-VALU) – gbn

回答