2008-08-29 51 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

創建表格時,列順序無關緊要。我們可以在從數據庫檢索數據的同時安排這些列。主鍵可以設置爲任何列或列的組合。