【问题标题】: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 数据库的图形工具会为您执行此操作,并让您看起来像是在重新排序列,因此您可能需要研究一下。

      【讨论】:

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

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

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

      here

      【讨论】:

        【解决方案5】:

        对于第一个项目符号:

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

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

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

        【讨论】:

        【解决方案6】:

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

        【讨论】:

          猜你喜欢
          • 2017-05-21
          • 1970-01-01
          • 1970-01-01
          • 2021-03-10
          • 2012-03-25
          • 1970-01-01
          • 2014-08-06
          相关资源
          最近更新 更多