高性能mysql读书笔记
2016-09-25
Schema与数据类型优化
数据库的设计军规
- 整数类型:
TINYINT
SMALLINT
MEDIUMINT
INT
BIGINT
分别使用8,16,24,32,64位存储空间。它们可以存储的值的范围从-2^(N-1) 到-2^(N-1) - 1,其中N是存储空间的位数。有可选的UNSIGNED
属性,表示不允许负值,例如:UNSIGNED
可以存储的范围是0 ~ 255,而TINYINT
的存储范围是-128 ~ 127。
- 实数类型:指带有小数部分的数字。对于
DECIMAL
列,可以指定小数点前后所允许的最大位数,这会影响列的空间消耗。MySQL 5.0和更高的版本将数字打包保存到一个二进制字符串中(每4格字节存储9格数字)。例如: DECIMAL(18,9)
小数点两边将个存储9格数字,一共使用9格字节,小数点前后各4各字节,小数点本身占用一个字节。浮点类型在存储同样范围的值时,通常比DECIMAL
使用更少的空间。FLOAT
使用4个字节存储,DOUBLE
占用8个字节,相比FLOAT
有更高的精度和更大的范围,MySQL
使用DOUBLE
作为内部浮点计算的类型。因为需要额外的空间和计算开销,所以应该尽量只在对小数进行精确计算时才使用DECIMAL
,例如存储财务数据,但在数据量比较大的时候,可以考虑使用BIGINT
代替DECIMAL
,将需要存储的值乘以小数点后面相应的倍数即可,这样同时避免浮点存储计算的不精确和DECIMAL
精确计算代价高的问题。
- 字符串: VARCHAR:用于存储可变长度字符串;CHAR:存储定长字符串