何時用char、varchar 之迷思

黃天華 2015/10/14 17:49:36
340







主題

何時用charvarchar 之迷思

文章簡介

了解資料庫charvarchar一些使用的觀念

作者

黃天華

版本/產出日期

V1.0/2015.10.14




迷思1.charvarchar 如果在相同長度時,誰的處理速度快?


一般來說比較成本是一樣的,所以現在的關鍵就看它看的索引查找的成本,因為查找策略一樣,因此應該比較誰佔用的空間小。

1. 若相同長度下充實度大於30%,理論上是char會比較快

2. 若相同長度下充實度小於30%,理論上是varchar會比較快

因為varchar需要額外空間存放長度空間,所以只要length(1-fillfactor)大於這個存放空間,那麼它就會比相同長度的char快了。


總結1.


如果無法確定儲存進來的資料大小時,則建議採用varchar




迷思2.假設是varchar那欄位的設計大小會影響他的處理速度嗎?


Varchar的存放和string是一樣原理的,即length{block}這樣方式,所以varchar的長度和它實際佔用空間是無關的。


迷思3.依上述2來看的話,那設到MAX就行了丫,真得是這樣就好了嗎?


資料庫中索引總長度最多支援900位元組,所以長度大於900的varchar、char和大於nvarchar、nchar將無法創建索引。(若為多主鍵的話,則加起來不能超過900),如下圖所示



當varchar設計超過900時,則無法設定索引鍵




當nvarchar設計超過450時,則無法設定索引鍵



當多索引鍵時,總和超過900也無法設定索引鍵



當varchar剛好900時,則符合條件



當nvarchar剛好450時,則符合條件


總結2.


因為varchar的欄位設計大小,不會影響他的處理速度,所以建議一般會把設計欄位放寬,別記得也別放太寬,超過不能設定索引的範圍。(除非該欄位一定不會當索引:例 Remark 之類的欄位)

黃天華