2009-09-11 91 views
3

在我以前的公司之一,我們曾經有一個單獨的表,我們在文本類型列上存儲了長描述。我認爲這是因爲文本類型帶來的限制。我需要爲nvarchar(最大)描述的單獨的表

林目前正在設計的,我的工作就和這個問題在我腦海中的現有應用程序表。我對將我的項目的長描述存儲在varchar(max)列上的同一個項目表上產生共鳴。我明白,我不能索引這一列,但這是好的,因爲我不會在這些列上進行搜索。

到目前爲止,我看不出有任何理由來此列分離到另一個表。

能否請您給我的輸入,如果我缺少的東西,或者儲存我的描述在同一個表上VARCHAR(max)是不錯的辦法?謝謝!

回答

5

保留它們所屬的表中的字段。由於SQL Server 2005的引擎在大數據類型甚至可變長度的短數據類型方面變得更加智能。舊的TEXT,NTEXT和IMAGE類型已棄用。具有MAX長度的新型號是他們的替代產品。在SQL 2005中,每個分區都有三種基本分配單位:一個用於行,一個用於LOB,一個用於行溢出。 MAX類型存儲在LOB分配單元中,因此實際上引擎會爲您管理一個單獨的表來存儲大型對象。行溢出單元用於行內可變長度數據,在更新後不再適合頁面,因此它被「溢出」到單獨的單元中。

請參閱Table and Index Organization

+0

真棒資訊,謝謝。 +1 – 2009-09-11 21:55:54

1

這取決於你的使用頻率,但沒錯,你可能希望在一個單獨的表。在做出決定之前,您需要閱讀SQL文件分頁,頁面分割以及sql如何存儲數據的詳細信息。

簡短的回答是,varcharmax()肯定會產生在那些字段長度改變很多性能下降,由於增加頁面拆分這是昂貴的操作。

+0

並保持在同一個表減少表的性能甚至我在做查詢表中檢索不包含描述列中的數據爲varchar(最大)列(這將是對我的鑰匙)?我也很好奇這些性能下降是否足以將列分隔到其他表中。我只是不想做一些可以忽略的不必要的工作。 – kaivalya 2009-09-11 20:14:31

+0

也許吧。這取決於字段更新的頻率。如果它們只是INSERT一次,而且很少更新,那麼它就不是那麼重要。 性能增加是否有意義是您通過建模您的特定場景才能知道的真正東西。用預期的行數填充表格。按照您期望的速度開始插入和更新一臺機器,然後用另一臺機器開始啓動大量選定的機器。測量性能使用不同的佈局創建一個新的數據庫並再次測試。 – 2009-09-11 21:55:02