設計表的時候,對變長字段長度選擇的一點思考

2021-09-19 22:36:22 字數 2522 閱讀 8903

原文:

設計表的時候,對變長字段長度選擇的一點思考

不管是在mssql還是mysql或者oracle,變長字段的長度衡量都是要經常面對的。

對於乙個變長的字段,在滿足業務的情況下(其實所謂的滿足業務是乙個比較模糊的東西),到底是選擇varchar(50)還是varchar(200)亦或是varchar(500)?

對於保守型選擇,往往是選擇乙個較大的長度,比如varchar(500)要比varchar(50)更具有相容性,因為是變長字段的原因,儲存空間也一樣。

這樣的選擇並不能說就不好,看站在哪個角度來看問題。

那麼,相對於varchar(50),varchar(500)在更具備相容性的同時,有哪些不好的地方,也是需要思考的,。

這裡的原則就是:對於可變長度的字段,在滿足條件的前提下,盡可能使用較短的變長字段長度。

以下是乙個相對極端的例子,以sql server為例,

testvarchar1和testvarchar2的sortcolumn 字段長度分別是varchar(50)和varchar(8000),兩個表寫入10000條測一樣的試資料,

sortcolumn 的實際長度是36個字元。

create

table

testvarchar1

( id

intidentity(1,1

), sortcolumn

varchar(50))

create

table

testvarchar2

( id

intidentity(1,1

), sortcolumn

varchar(8000))

declare

@sortcolumn

char(36

);set

@sortcolumn

=cast(newid() as

char(36

))insert

into testvarchar1(sortcolumn) values (@sortcolumn

)insert

into testvarchar2(sortcolumn) values (@sortcolumn)go

10000

1,基於儲存空間的考慮儲存空間上,儲存不超過一定長度的變長字段,不同長度的變長字段儲存空間是一樣的,比如選擇使用varchar(50)和varchar(500)是一樣的,

也就說,對於不超過50個字串的資料儲存,兩者在物理空間占用上並沒有區別。

這裡會發現,兩個表的資料在完全一致的情況下,其儲存空間也是完全一樣的,的確,並不會因為varchar使用乙個較長的長度而多占用儲存空間

2,基於效能的考慮

選擇varchar(50)還是varchar(8000),在效能上確實有顯著的差異,考慮到某些查詢需要記憶體(memory grant),查詢引擎會預估當前查詢需要的記憶體,影響查詢記憶體的因素有以下幾個方面

1,查詢的型別,有沒有聚合運算,有沒有排序等等

2,每個操作符涉及到的記錄數量

3,資料行的大小(這裡是字段型別的長度而不是字段實際長度)

當行記錄的資料型別長度較大的時候,執行計畫預估的平均大小較大,資料型別定義的長度越大,預估的長度越大,需要分配的記憶體越大

如果乙個查詢涉及一些聚合操作並且資料量較大,就可能需要大量的記憶體來完成這個查詢,查詢引起會分配多餘實際需要的記憶體。

兩者對資料行size的預估是一樣的(儘管是完全一樣的資料)

造成的結果就是兩個查詢的記憶體授予是一樣的,同時第二個執行計畫還有乙個警告資訊(黃色的感嘆號)

以上可以看出,儘管兩個表的資料是完全一致的,

不過欄位的最大長度不一致,造成執行計畫預估出現較大的偏差,因此給予較高的記憶體,浪費無所謂的資源。

再看乙個通過聚合函式操作兩張表的例子,會增加cpu的使用。

因此對於可變長度的字段,在滿足條件的前提下,盡可能使用較短的變長字段長度。

當然,較大的字段(相比較小)還可能存在一些不是太直觀的影響,參考:

設計表的時候,對變長字段長度選擇的一點思考

原文 設計表的時候,對變長字段長度選擇的一點思考 不管是在mssql還是mysql或者oracle,變長字段的長度衡量都是要經常面對的。對於乙個變長的字段,在滿足業務的情況下 其實所謂的滿足業務是乙個比較模糊的東西 到底是選擇varchar 50 還是varchar 200 亦或是varchar 5...

MyBatis更新欄位為null的一點思路

問題 在好多任務程裡,我們都習慣了使用if test null進行部分字段動態更新。但是如果我們遇到這種需要更新欄位為null的情況呢?大概方案想到了三種 去掉test條件。需要保證更新的實體都是從db中查出來的,否則會丟資料 使用特殊的值。比如 1等,這種含義有點模糊不清,並且可能以後隨著業務發展...

我對網頁設計的一點見解

我對網頁設計的一點見解 ryansoft 原作 關鍵字我對網頁設計的一點見解 出處首先說明一點,我不是專業的網頁設計人士,我是個程式設計師,不過接觸網頁已經有6年了,從一開始用html寫網頁到現在用dreamware來填網頁,多多少少也有半點見解吧.今天在藍色理想看到兩篇值得我收藏的文章,感覺真的不...