SQL Server - 列顺序是否重要?

时间:2008-08-29 17:34:47

标签: sql-server performance optimization

在性能和优化方面:

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

6 个答案:

答案 0 :(得分:8)

在SQL Server 2005中,可以为空的可变长度列的放置会产生空间影响 - 在定义的末尾放置可以为空的可变大小列可以减少空间消耗。

SQL Server 2008添加了“SPARSE”列功能,否定了这种差异。

请参阅here

答案 1 :(得分:3)

我会说所有这些问题的答案都是NO,尽管我对MS-SQL的经验远远超过了SQL2000。可能是SQL 2005中的另一个故事

答案 2 :(得分:3)

对于第四个项目符号:否,您无法指定要添加列的位置。以下是ALTER TABLE的语法:https://msdn.microsoft.com/en-us/library/ms190273.aspx

在MySQL中,他们提供了一个ALTER TABLE ADD ... AFTER ......但这不会出现在T-SQL中。

如果要重新排序列,则必须重建表。

编辑:对于上一个最后项目符号点,您必须删除该表并重新创建它以重新排序列。一些操作SQL数据库的图形工具会为您执行此操作并使其看起来像您正在重新排序列,因此您可能需要查看它。

答案 3 :(得分:1)

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

答案 4 :(得分:0)

创建表时,列顺序无关紧要。我们可以在从数据库中检索数据时排列列。主键可以设置为任何列或列组合。

答案 5 :(得分:-3)

第一颗子弹:

,列顺序 至关重要,至少在您使用已弃用的BLOB imagetext或{{1}时},并使用SQL Server< = 2005。

在这些情况下,您应该在表的“结尾”放置这些列,并且每次检索时都会出现性能损失。

如果您使用DAL从这样的表中检索数据,这是Lazy Load模式的理想位置。