【问题标题】:SQL Server - Does column order matter?SQL Server - 列顺序重要吗?
【发布时间】:2010-09-07 06:46:20
【问题描述】:
在性能和优化方面:
- 在 SQL Server 中构建表时,我将列放置的顺序是否重要?
- 如果我的主键是第一列,这有关系吗?
- 在构建多字段索引时,列是否相邻是否重要?
- 使用 ALTER TABLE 语法,是否可以指定我想在什么位置添加一列?
【问题讨论】:
标签:
sql-server
performance
optimization
【解决方案1】:
我会说所有这些问题的答案是否定的,尽管我在 MS-SQL 方面的经验一直到 SQL2000。在 SQL2005 中可能是另一回事
【解决方案2】:
前 3 个没有,因为索引将保存数据,最后一个也没有
【解决方案3】:
对于第四个项目符号:不,您不能指定要添加列的位置。这是 ALTER TABLE 的语法:https://msdn.microsoft.com/en-us/library/ms190273.aspx
在 MySQL 中,他们提供了一个 ALTER TABLE ADD ... AFTER ... 但这不会出现在 T-SQL 中。
如果要对列重新排序,则必须重建表。
编辑:对于最后一个 last 要点,您必须删除表并重新创建它以重新排序列。一些操作 SQL 数据库的图形工具会为您执行此操作,并让您看起来像是在重新排序列,因此您可能需要研究一下。
【解决方案4】:
在 SQL Server 2005 中,可空可变长度列的放置会影响空间 - 可空可变长度列放置在定义的末尾可以减少空间消耗。
SQL Server 2008 添加了“SPARSE”列功能,可以消除这种差异。
见here。
【解决方案5】:
对于第一个项目符号:
是,列顺序确实很重要,至少在您使用已弃用的 BLOB image、text 或 ntext 并使用 SQL Server 时
在这些情况下,您应该将这些列放在表的“末尾”,并且每次检索一列都会影响性能。
如果您要使用 DAL 从此类表中检索数据,那么这是使用 Lazy Load 模式的理想场所。
【解决方案6】:
创建表时列顺序无关紧要。我们可以在从数据库中检索数据时排列列。主键可以设置为任意列或列组合。