高性能mysql读书笔记

Schema与数据类型优化

数据库的设计军规
  • 更小的通常更好
  • 简单就好
  • 尽量避免NULL
  1. 整数类型: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。
  2. 实数类型:指带有小数部分的数字。对于DECIMAL列,可以指定小数点前后所允许的最大位数,这会影响列的空间消耗。MySQL 5.0和更高的版本将数字打包保存到一个二进制字符串中(每4格字节存储9格数字)。例如: DECIMAL(18,9)小数点两边将个存储9格数字,一共使用9格字节,小数点前后各4各字节,小数点本身占用一个字节。浮点类型在存储同样范围的值时,通常比DECIMAL使用更少的空间。FLOAT使用4个字节存储,DOUBLE占用8个字节,相比FLOAT有更高的精度和更大的范围,MySQL使用DOUBLE作为内部浮点计算的类型。因为需要额外的空间和计算开销,所以应该尽量只在对小数进行精确计算时才使用DECIMAL,例如存储财务数据,但在数据量比较大的时候,可以考虑使用BIGINT代替DECIMAL,将需要存储的值乘以小数点后面相应的倍数即可,这样同时避免浮点存储计算的不精确和DECIMAL精确计算代价高的问题。
  3. 字符串: VARCHAR:用于存储可变长度字符串;CHAR:存储定长字符串