# 資料類型
### 越小越好
要使用能夠用來正確儲存資料的最小類型的資料型態,要確保不會低估要儲存的資料大小,因為當資料可以確定用比較少的資料去儲存的時候,所`使用的空間`也會更少,所`需要的索引空間`也會越少,取得資料所需要的`計算時間`也會越短。
> 在可以用`CHAR(20)`去儲存資料時,就不要用`CHAR(200)`
> 在可以用`VARCHAR(20)`去儲存資料時,就不要用`VARCHAR(200)`
> 在可以用`TINYINT`去儲存資料時,就不要用`INT`
> 在可以用`TEXT`去儲存資料時,就不要用`LONGTEXT`
> 在可以用`BLOB`去儲存資料時,就不要用`LONGBLOG`
### 越簡單越好
> 整數(INT)> 固定字串(CHAR)> 變動字串(VARCHAR)> 文字(TEXT)
越簡單的資料類型,資料庫所需要用來建立索引的效率越好,因為資料類型越複雜代表資料的排列組合越多,所以需要更大的索引及計算去取得資料
> 在可以用整數(INT)去儲存資料時,就不要用固定字串(CHAR)
> 在可以用固定字串(CHAR)去儲存資料時,就不要用變動字串(VARCHAR)
> 在可以用變動字串(VARCHAR)去儲存資料時,就不要用文字(TEXT)
### 盡量不使用NULL
若非必要儲存NULL的資料,否則要盡可能的把資料欄位設定為NOT NULL,資料庫很難最佳化有NULL資料欄位的查詢,可以NULL的資料欄位需要更多的儲存空間,資料庫還需要對其進行特殊處理,而當有NULL資料欄位使用`索引(INDEX)`的時候,每一條的索引紀錄必需要額外紀錄資料,導致查詢時索引的效率降低。
若真的要儲存NULL,在`不影響原有的資料`的情況下,可以考慮用`0`、`特殊值`...等等之類的值去代替,可以用來區別是否為NULL
### 結論
一切的資料類型都只能看自己應用的需求去決定,如果沒辦法還是要用比較複雜的資料類型,那還是必須要用,資料的完整性比任何的東西都重要多了,效率就想辦法用`增加機器`或者是`優化資料表結構`...等等的其他方式去達成,不要為了效率增加而強迫使用特定的資料類型,這樣反而是因噎廢食。
### 參考資料
- [KeJyun學習日誌: 提高存取MySQL效率小技巧](http://blog.kejyun.com/2012/12/Tips-For-Use-MySQL-With-High-Performance.html)