SQL Server - 列顺序重要吗?

Posted

技术标签:

【中文标题】SQL Server - 列顺序重要吗?【英文标题】:SQL Server - Does column order matter? 【发布时间】:2010-09-07 06:46:20 【问题描述】:

在性能和优化方面:

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

【问题讨论】:

见***.com/questions/6692021/… 在 DBA.SE 上有一个类似的问题:Does the order of columns in a table's definition matter? 【参考方案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 数据库的图形工具会为您执行此操作,并让您看起来像是在重新排序列,因此您可能需要研究一下。

【讨论】:

链接已修复。自 [404] 以来与链接腐烂作斗争【参考方案4】:

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

SQL Server 2008 添加了“SPARSE”列功能,可以消除这种差异。

见here。

【讨论】:

【参考方案5】:

对于第一个项目符号:

,列顺序确实很重要,至少在您使用已弃用的 BLOB imagetextntext 并使用 SQL Server 时

在这些情况下,您应该将这些列放在表的“末尾”,并且每次检索一列都会影响性能。

如果您要使用 DAL 从此类表中检索数据,那么这是使用 Lazy Load 模式的理想场所。

【讨论】:

我以为我发表了评论。完全垃圾***.com/questions/6692021/…【参考方案6】:

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

【讨论】:

以上是关于SQL Server - 列顺序重要吗?的主要内容,如果未能解决你的问题,请参考以下文章

列存储索引中列的顺序在 SQL Server 2012 中是不是重要

Oracle:索引中的列顺序重要吗?

SQL Server创建复合索引时,复合索引列顺序对查询的性能影响

SQL Server创建复合索引时,复合索引列顺序对查询的性能影响

SQL Server创建复合索引时,复合索引列顺序对查询的性能影响

SQL Server创建复合索引时,复合索引列顺序对查询的性能影响