2008-08-29 50 views
23

在性能方面和优化:SQL Server - 列顺序是否重要?

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

请参阅http://stackoverflow.com/questions/6692021/performance-space-implications-when-ordering-sql-server-columns – gbn 2011-10-17 06:07:31

+0

以下是关于DBA.SE的一个类似问题:[列表的列顺序定义事项?](http://dba.stackexchange.com/q/18719/2660) – 2012-06-05 17:25:10

回答

3

我要说回答所有这些问题是NO,altough我与MS-SQL的经验尽可能SQL2000去。可能是一个不同的故事在SQL2005

1

没有前3因为该指数将保持数据和没有最后一次也

3

对于第四弹:不,你不能指定要添加柱。这里是ALTER TABLE的语法:https://msdn.microsoft.com/en-us/library/ms190273.aspx

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

如果你想重新排序列,你将不得不重建表。

编辑︰你的最后最后项目符号点,你必须删除表并重新创建它重新排序列。一些操作SQL数据库的图形工具会为你做这些工作,并使它看起来像你重新排列列,所以你可能想看看。

+0

链接固定。自从[404] – 2015-08-06 18:18:54

8

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

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

请参阅here

-2

对于第一个项目符号:

,列顺序确实事,至少如果你使用的是过时的BLOB imagetext,或者ntext,并使用SQL Server < = 2005

在这些情况下,您应该在表格的“结尾”放置这些列,并且每次检索时都会有性能问题。

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

0

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