數據庫設計原則:
mysql
a,更小的一般更好。c++
應該儘可能使用能夠正確存儲數據的最小數據類型。如只要存儲0-200,tinyint unsigned更好sql
b,簡單就好數據庫
簡單的數據類型的操做須要更少的cpu週期。同時後期優化也更爲容易。數據庫設計
c,儘可能避免使用null工具
mysql在創建索引,優化過程對null須要作特殊處理,耗費額外資源。非特殊狀況,避免使用null。優化
數據類型常識
spa
一,整數類型設計
根據存儲空間:
blog
TINYINT | SMALLINT | MEDIUMINT | INT | BIGINT | |
存儲空間位數n | 8 | 16 | 24 | 32 | 64 |
存儲範圍 | -128~127 |
根據屬性
unsigned:-2(N-1)-2(N-1)-1 --沒辦法輸入右上標
signed:0~2(N-1)
指定寬度
INT(11),這對大多數應用沒有實際意義,他不會限制值的合法範圍,只是規定了一些交互工具用來顯示字符的個數,對存儲和計算來講,INT(11)和INT(20)是相同的
二:實數類型
float,double,decimal
float和double使用標準浮點近似運算.
decimal使用精確運算.須要額外開銷,
decimal(18,9),存儲18位數,小數點左右各9位。
三,字符串類型
長度 | 額外記錄長度 | 長度不足 | 長度超出 | 尾部空格 | |||||
varchar(n) | 變長 | 須要 | 以實際長度存儲 | 截斷 | 保留 | ||||
char(n) | 定長 | 不須要 | 尾部用空格填充 | 截斷 |
刪除 |
varchar:字符串最大長度比平均長度大不少,列更新不多,碎片不是問題
char:char會根據須要對存儲數據尾部空格刪除,若是長度不足,採用空格對尾部填充,
適合存儲很短,或者全部值都接近同一個長度
四,日期和時間類型
datetime,timestamp
datetime:它把日期和時間封裝成YYYYMMDDHHMMSS的整數中,可排序,無奇異,可表示範圍到9999年
timestamp,保存從1970-01-01午夜以來的秒數,具有自動刷新功能,和時區綁定,效率更高,可表示範圍到2038年。
五,大文本類型
blog,text,這種數據我一直認爲應該以文本形式存儲在系統文件中比較好
六,ENUM
有限類型字符串,用枚舉的方式代替,效率更高。
數據類型不外乎是mysql用來存儲數據的格式規範,mysql由c++開發,其實本身用c++定義一套數據庫亦可,只是mysql更成熟穩定罷了。