幾個原則:更小的一般更好 簡單就好 儘可能避免NULL性能
選擇數據類型時,先選合適的大類型:數字,字符串,時間等。下一步選擇具體類型。優化
具體類型包括:設計
若是存儲整數,可使用如下幾種數據類型:blog
TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT。分別使用8,16,24,32,64位存儲空間。可選UNSIGNED屬性。字符串
若是存儲實數類型:FLOAT和DOUBLE支持使用標準浮點運算進行近似計算,而DECIMAL類型用於存儲精確的小數。效率
浮點類型在存儲一樣範圍的值時,一般比DECIMAL使用更少的空間。FLOAT使用4個字節存儲,而DOUBLE佔用8個字節。因爲開銷,除非要對小數進行精確計算,不然不要用DECIMAL。數據類型
VARCHAR二進制
VARCHAR用於存儲可變長字符串,比CHAR更節省空間。VARCHAR使用1或2個額外字節記錄字符串的長度。VARCHAR節省了存儲空間,因此對性能也有幫助。im
如下狀況適合用VARCHAR:數據
1.字符串列的最大長度比平均長度大不少;
2.列的更新不多;
3.UTF-8字符集,每一個字符用不一樣的字節數進行存儲
CHAR
CHAR類型是定長的:MySQL老是根據定義的字符串長度分配足夠的空間。
存CHAR值時,MySQL會刪除全部的末尾空格。 CHAR適合存儲很短的字符串,或者全部值都接近同一個長度。
BINARY和VARBINARY存儲的是二進制字符串。
BLOB和TEXT類型
爲存儲很大的數據而設計的字符串數據類型,分別採用二進制和字符方式存儲。
使用枚舉(ENUM)代替字符串類型
可讓表的大小縮小,並且當把列都轉換成ENUM之後,關聯變得很快。
DATETIME
TIMESTAMP
一般儘可能使用TIMESTAMP,由於它比DATETIME空間效率更高。
BIT
SET
在整數列上按位操做
整數類型
整數一般是標識列最好的選擇,由於它們很快而且可使用AUTO_INCREMENT。
ENUM和SET類型
避免
字符串類型
避免
2.MySQL schema 設計中的陷阱
太好的列
全能的枚舉
3.範式和反範式