2009-01-23 140 views

回答

6

這取決於在特定列中存儲大量數據是否合理。

如果聲明永遠不會正確地儲存大量數據的列(即僱員的名字爲VARCHAR(1000)),你最終得到的各種問題

  1. 許多,如果不是大多數客戶端API (即ODBC驅動程序,JDBC驅動程序等)在客戶端上分配足夠大的內存緩衝區以存儲特定列的最大大小。因此,即使數據庫只需要存儲實際數據,您也可能會顯着增加客戶端應用程序使用的內存量。
  2. 您從表定義中失去驅動數據驗證規則(或傳遞有關數據的信息)的能力。如果數據庫允許使用1000個字符的名字,那麼與數據庫交互的每個應用程序可能最終都會有自己的規則來規定員工姓名的大小。如果這不是通過在所有應用程序和表之間放置存儲過程層來緩解的,則這通常會導致各種應用程序擁有各種規則。
  3. 墨菲法則規定,如果允許1000個字符,某人最終將在該列中存儲1000個字符,或者至少有一個值足以導致一個或多個應用程序出錯(即沒有人檢查每個應用程序的員工姓名字段可顯示1000個字符)。
0

您可以將破壞你的應用程序的風險,如果一個大的數據得到了在以某種方式(如從外部接口)和您的應用程序不是設計來處理它。

作爲一個好的設計,您應該始終將字段的大小限制在一個現實的值。

4

取決於RDBMS。 IIRC,MySql爲varchar> 255個字符分配2字節開銷(以跟蹤varchar長度)。 MSSQL < = 2000將允許您分配大於8060字節的行大小,但如果您試圖插入或更新實際超過8060字節的行,則會失敗。 SQL 2005 [1]允許插入,但會爲溢出分配一個新頁面,並留下一個指針。顯然,這會影響性能。

varchar(max)有些特殊情況,但如果字段的長度大於8000或行大於8060,也會分配溢出頁面。這是MSSQL默認值,行爲可能會更改與數據行選項中的大類型。

相關問題