SQL Server - 列的顺序是否重要?

29

在性能和优化方面:

  • 在 SQL Server 中构建表时,我放置列的顺序是否重要?
  • 如果我的主键是第一列,这是否重要?
  • 在构建多字段索引时,如果列是相邻的,这是否重要?
  • 使用 ALTER TABLE 语法,是否可以指定我想要添加列的位置?
    • 如果不行,如何将列移动到其他位置?

请参见 https://dev59.com/Y1nUa4cB1Zd3GeqPYjsL。 - gbn
这里有一个类似的问题在DBA.SE上:表定义中列的顺序是否重要? - Nick Chammas
1
您可以使用下面的链接获取更多详细信息: https://dba.stackexchange.com/questions/18719/does-the-order-of-columns-in-a-tables-definition-matter - Keyvan Soleimani
6个回答

9
在SQL Server 2005中,可空的变长列的放置会影响空间 - 将可空的变长列放置在定义的末尾可以减少空间消耗。
SQL Server 2008添加了“SPARSE”列功能,从而抵消了这种差异。
请参阅这里

3

我会说所有这些问题的答案都是否定的,尽管我的MS-SQL经验只到SQL2000。在SQL2005中可能是另一回事。


3
对于第四个要点:不能指定要添加列的位置。以下是 ALTER TABLE 的语法:https://msdn.microsoft.com/en-us/library/ms190273.aspx MySQL 提供 ALTER TABLE ADD ... AFTER ...,但在 T-SQL 中似乎没有这个选项。
如果您想重新排序列,则必须重建表格。
编辑:对于您最后一个要点,您需要删除表格并重新创建它以重新排序列。一些操纵 SQL 数据库的图形工具将为您执行此操作,并使其看起来像您正在重新排序列,因此您可能需要研究一下。

链接已修复。自[404]以来一直在与链接失效作斗争。 - Tim Abell

1

不要前三个,因为索引将保存数据而不是最后一个


0

在创建表时,列的顺序并不重要。我们可以在从数据库检索数据时排列这些列。主键可以设置为任何列或列组合。


-3

第一条:

是的,列顺序确实很重要,至少在使用已弃用的BLOBs image, text, 或者 ntext 并且使用 SQL Server <= 2005的情况下。

在这些情况下,您应该把这些列放在表的“末尾”,每次检索时都会有性能损失。

如果您正在使用DAL从这样的表中检索数据,这就是Lazy Load模式的完美实践场所。


我以为我已经评论了。完全是胡说八道。https://dev59.com/Y1nUa4cB1Zd3GeqPYjsL#6692107 - gbn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接