數據類型優化建議
- 字段所佔空間越小越好。
- 避免使用null
- 能用整數的不用不用字符串。
- 日期推薦使用timestamp。
- 關聯查詢關聯字段儘可能類型一致。
整數類型
類型 | 所佔空間(位) | 值範圍 | 說明 |
tinyint | 8 | -2^7 至 -2^7(128) | |
smallint | 16 | -2^15 至 -2^15(32768) | |
mediumint | 24 | -2^23 至 -2^23 (8388608) | |
int | 32 | -2^31 至 -2^31(...) | |
bigint | 64 | -2^63 至 -2^63 (...) |
- + unsigned 所佔空間不變,值乘以2。
- 有無unsigned儲存空間不變,性能也不會變。
- int(11) 11只是限制數字個數與儲存空間大小無關。
實數類型
類型 | 所佔空間(位) | 值範圍 | 說明 |
float | 32 | ||
double | 64 | ||
decimal | 最大65個數字(4位/9個數字,也就是31位) | 轉化爲double進行實現的 |
- 可以把浮點乘以多少倍用整數的形式儲存。
字符類型
類型 | 所佔空間(位) | 值範圍 | 說明 |
varchar | 變長;會利用1-2個字節來存儲長度(大於255用兩個字節) | ||
char | 定長;適合儲存固定長度的字符串 | ||
text | 文本儲存 | ||
binary | 定長;二進制儲存可以區分大小寫; | ||
varbinary | 變長;二進制儲存可以區分大小寫; | ||
blob | 二進制文本儲存 | ||
enum | 轉化爲整數進行儲存 | ||
timestamp | 1970年1月1日午夜以來的秒數 | ||
datetime | 格式: YYYY-MM-DD HH:MM:SS |
- varchar(1)比char(1)多用一個字節。
- enum 與char或者varchar關聯查詢,速度沒有char和char關聯查詢快(個人理解:類型不同導致)。
- enum排序是根據儲存的整數進行排序,可以使用field進行處理這個不足,但是如果使用field將無法使用該字段所建立的索引。