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 image
、text
或 ntext
并使用 SQL Server 时
在这些情况下,您应该将这些列放在表的“末尾”,并且每次检索一列都会影响性能。
如果您要使用 DAL 从此类表中检索数据,那么这是使用 Lazy Load 模式的理想场所。
【讨论】:
我以为我发表了评论。完全垃圾***.com/questions/6692021/…【参考方案6】:创建表时列顺序无关紧要。我们可以在从数据库中检索数据时排列列。主键可以设置为任意列或列组合。
【讨论】:
以上是关于SQL Server - 列顺序重要吗?的主要内容,如果未能解决你的问题,请参考以下文章
列存储索引中列的顺序在 SQL Server 2012 中是不是重要
SQL Server创建复合索引时,复合索引列顺序对查询的性能影响
SQL Server创建复合索引时,复合索引列顺序对查询的性能影响