MySQL資料庫表設計規範
阿新 • • 發佈:2018-12-21
- 用盡量少的儲存空間來儲存一個欄位的資料;例如:能使用int就不要使用varchar、char,能用varchar(16)就不要使用varchar(255);預設情況下,InnoDB引擎單一欄位索引的長度最大為767位元組,當使用UTF-8字符集,每一個字元使用3位元組儲存,在text或者varchar型別的欄位上建立一個超過255字元數的索引時會遇到問題。
- 變長欄位使用varchar,不要使用char,varchar的長度只分配真正需要的空間;注意varchar(M)裡的M指的是字元數不是位元組數
- IP地址最好使用int型別;
- 固定長度的型別最好使用char,例如:郵編;
- 能使用tinyint就不要使用smallint,int;
- 最好給每個欄位一個預設值,最好不能為空,null欄位很難查詢優化且佔用額外索引空間null欄位的複合索引無效。
- 經常需要計算和排序等消耗CPU的欄位,應該儘量選擇更為迅速的欄位,如用timestamp(4個位元組,最小值1970-01-01 00:00:00)代替Datetime(8個位元組,最小值1001-01-01 00:00:00),通過整型代替浮點型和字元型;
- Datatime儲存範圍比timestamp大很多,timestamp只能儲存到2038年;
- 對於二進位制多媒體資料,流水佇列資料(如日誌),超大文字資料不要放在資料庫欄位中;
- 並不需要一定遵守正規化理論,適度的冗餘,讓Query儘量減少Join;
- 必須使用varchar(20)儲存手機號。涉及到區號或者國家代號,可能出現+-(),varchar可以支援模糊查詢,例如:like“138%”;
- 欄位型別在滿足條件下越小越好,使用UNSIGNED儲存非負整數,實際使用時候儲存負數場景不多;
- 使用OECIMAL儲存精確浮點數,用float有的時候會有問題;