2010-12-15 378 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

相關問題