几个原则:更小的一般更好 简单就好 尽可能避免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.范式和反范式