表中列的顺序是否重要?

时间:2010-12-15 18:20:09

标签: sql-server

我们有许多大大小小的项目 - 大多数(如果不是全部)项目至少使用一个SQL Server数据库。所有这些都设置了不同的环境。通常:dev(1 +),QA,UAT,Live。 我们通常会相互独立地向不同的环境发布各种代码更新。当然,其中一些更新带有架构更新脚本,例如

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

有时是手工制作,有时使用Red Gate SQL / Data Compare。

无论如何,我要去的地方通常是同一个项目的不同环境最终会有不同的列顺序。这是一个问题吗?我真的不知道...... 列顺序是否有任何性能影响?我可能遗失的任何东西?

2 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:3)

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

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

但是再说一次:这真的是一个罕见的边缘情况,而不是常态。

另外,请注意:SQL Server无法重新排序列。您可以在可视化表设计器中执行此操作 - 但SQL Server所做的是创建具有所需列排序的新表,然后复制旧表中的所有数据。这就是为大型桌子操作这是一项非常繁琐且耗时的操作的原因。