2012-01-02 59 views
6

使用SQL Server 2005標準版SP2SQL Server的VARBINARY(max)和在一個單獨的表

我需要設計一個表,其中我將存儲的文本文件(〜200KB)一起爲varchar(max)數據與文件名,說明和日期時間。

我們應該設計一個表,其中varchar(max)和varbinary(max)數據應該存儲在單獨的表中,還是應該將LOB數據類型的列作爲主表的一部分?

每此線程 What is the benefit of having varbinary field in a separate 1-1 table?

沒有性能或操作的好處,我同意在一定程度上卻 我可以看到兩個好處

  1. 店那些爲可以被存儲在可分離表一個單獨的文件組
  2. 無法在包含lob數據類型的表上重建索引ONLINE

任何建議,將不勝感激。

+0

這裏你的實際問題是什麼?尋求建議不適合StackOverflow格式。你的約束是什麼? – Oded 2012-01-02 18:15:11

+0

一般來說,在數據庫設計方面推薦什麼?你可以自由發表你的意見。我不會辯論它。表將頂部coupld百萬行varchar(max)列將不爲空。 – 2012-01-02 18:20:45

+0

問題是,你正在尋求意見 - 而不是在StackOverflow這裏鼓勵的東西。 – Oded 2012-01-02 18:21:33

回答

7

我會建議不要分居。它顯着地使設計變得複雜,幾乎沒有任何好處。如您所知,SQL Server已經將LOB存儲在單獨的分配單元上,如Table and Index Organization中所述。

Mikael已經指出,通過在CREATE TABLE語句中適當地指定所需的文件組,您可以明確地解決您首先關心的問題(爲LOB數據單獨分配文件組)。

您的第二個問題不再是SQL Server 2012的問題,請參閱Online Index Operations for Indexes containing LOB columns。即使在SQL Server 2012之前,您也可以毫無問題地重新組織LOB的索引(並且REORGANIZE處於聯機狀態)。假設完整的索引重建是非常昂貴的操作(在表/索引級別執行在線重建必須,沒有分區聯機重建選項),您確定要使設計複雜化以適應一方面,很少需要,另一方面,升級到SQL 2012時可用?

+0

Remus,你是一個真正的SQL服務器寶石@Microsoft。我感謝您的意見。 – 2012-01-02 19:20:57

+0

Remus:如果一個表有2個varchar(max)列很少使用並導致錶快速增長會怎樣?在這種情況下你會分裂成一個單獨的表? – user2966445 2015-06-18 13:52:08

+0

@ user2966445:將問題作爲單獨的問題提出,而不是作爲評論。 – 2015-06-18 14:09:28

0

我可以用一個簡單的詞來回答你的問題:吻。

哪個當然代表...保持簡單愚蠢。

添加表格通常是一個禁忌,除非您確實需要解決問題。

一般來說,我不同意拆分表。它增加了數據庫和代碼的複雜性。在表中使用無用的列是一件壞事,但當你只需要一個表時,它不會像多個表一樣糟糕。

案例,你會考慮加入另一個表:

  1. 你的一些列的是數據的BLOB的(而不是頁面大小時),他們很少使用且數據量小的尺寸等欄目被頻繁訪問。
  2. 如果你缺乏大腦。
  3. 如果你是邪惡的。
  4. 或者...如果你試圖剝奪你的同事。
相關問題