何時用char、varchar 之迷思
主題: |
何時用char、varchar 之迷思 |
文章簡介: |
了解資料庫char、varchar一些使用的觀念 |
作者: |
黃天華 |
版本/產出日期: |
V1.0/2015.10.14 |
迷思1.char跟varchar 如果在相同長度時,誰的處理速度快?
一般來說比較成本是一樣的,所以現在的關鍵就看它看的索引查找的成本,因為查找策略一樣,因此應該比較誰佔用的空間小。
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 之類的欄位)