2010-12-15 385 views
8

我们有许多大大小小的项目 - 大多数(如果不是全部的话)至少使用一个SQL Server数据库。他们都有不同的环境设置。通常:dev(1+),QA,UAT,Live。 我们通常会将各种代码更新发布到彼此独立的不同环境中。当然其中的一些更新来使用红门SQL /数据比较,如表中的列顺序是否重要?

alter table foo add column bar 
go 
update foo set bar=... where ... 

有时由手工制作架构更新脚本,其他时间。

无论如何,我要与这是通常不同的环境,为同一个项目结束了不同的列顺序。这是一个问题吗?我不知道... 列顺序是否有任何性能影响?任何我可能会错过的东西?

回答

8

不,列顺序不重要。实际上,列数据存储在磁盘上的顺序本身可能与您在客户端工具中看到的顺序本身不同,因为引擎重新排序数据以优化存储空间和读/写性能(将多个位字段放入单个内存位置,在内存边界上对齐列等)。

+0

@marc_s:当然有参考... http://www.sqlskills.com/BLOGS/PAUL/post/Inside-the-Storage-Engine-Anatomy-of-a-record.aspx或MSDN/BOL too – gbn 2010-12-15 19:06:15

3

不是真的 - 在95%的情况下,列排序没有区别。而从关系理论的角度来看,无论如何,表中的列顺序都是无关紧要的。

在列表顺序可能会对表格产生轻微影响的情况下,通常在有大量可变大小字段(如VARCHAR)时,会出现一些边缘情况。但是这个数字需要非常大,而且您的字段(它们的大小)需要非常大 - 在这种情况下,将这些可变大小的字段按列排序放在表格末尾可能是有益的。

但是,这实际上更多的是一个罕见的边缘情况,而不是常态。

另外,请注意:SQL Server无法重新排列列,真的。你可以在可视化表设计器中做到这一点 - 但是SQL Server下面做的是用所需的列顺序创建一个新表,然后复制旧表中的所有数据。这就是对于大型桌子来说这是一项非常繁琐和耗时的操作的原因。

+0

是的,知道需要重新创建表来重新排列列,但是Charles Bretana似乎在说SQL Studio中列的顺序与实际存储在数据库中的顺序不同,这有点矛盾吗? – 2010-12-15 18:38:06

+0

@ liho1eye:是的,我也很惊讶地看到这一点 - 不知道这是否属实,也找不到这个事实的任何提及。 – 2010-12-15 18:59:42

+0

@ liho1eye,@marc_s:如果你看看磁盘存储,固定长度的列首先变长。关于“字符串最后”的古老谚语是垃圾恕我直言。 http://www.sqlskills.com/BLOGS/PAUL/post/Inside-the-Storage-Engine-Anatomy-of-a-record.aspx或MSDN/BOL也可 – gbn 2010-12-15 19:05:40

相关问题