第四章—数据库与数据优化

选择优化的数据类型

  • 更小的通常更好
    • 一般情况下,应该使用正确存储数据的最小类型
    • 因为占用的内存、磁盘、cpu资源更少
  • 简单就好
    • 简单的数据类型需要的CPU周期更少,例如操作整型比操作字符代价更低
  • 尽量避免NULL,如果不是特别的需要null值,一般设为不为空,因为mysql对null的索引比较复杂
  • datetime和timestamp都可以存储时间,精确到秒。但是timestamp只是用datetime的一半存储空间,而且会根据时区变化,具有特殊的自动更新能力

整数类型

  • tinyint(8位)
  • smallint(16位)
  • mediumint(24位)
  • int(32位)
  • bigint(64位)
  • 数据范围```-2^(N-1)~2^(N-1)
  • 整数计算一般使用bigint
  • 对于存储和计算来说int(1)和int(20)没有区别

实数类型

  • 实数是带有小数部分的数字
  • float、double(可以指定数据宽度:double(18,9)表示数据一共18位,小数点后面保留9位),但是要避免指定数据精度,mysql已经抛弃了指定浮点数精度与整数显示宽度的特性,虽然还可以继续使用,但是最好不要使用mysql抛弃的这些特性。
  • decimal支持精确计算,可以存储比bigint还大的数据。但是cpu不支持decimal的计算(由算法解决),cpu原生支持浮点运算

字符串类型

varchar

  • 用于存储变长的字符
  • 会额外使用1或2个空间记录字符串的长度
  • 字符长度大于255个时,使用2个空间记录,否则使用1个

char

  • 存储定长的字符
  • char格式会删除字符后面的空格,但前面的不会,例如输入ABC__,但是只会输出ABC。但是varchar会保留原有格式
  • 对于定长的数据,无论它是固定的还是会变化的,只要长度固定就使用char,例如MD5加密后额密码,定长的char不容易产生碎片
  • 存储Y这个字母,char需要1个空间,varchar需要2

binary和varbinary

  • 用来存储二进制字符串
  • 二进制字符串存储的是字节码不是字符

注意

  • 若存储HELLO,使用varchar(6)比使用varchar(200)更好。
  • 最好的策略是只分配真正需要的空间

混合使用范式与反范式

  • 范式的优点:操作速度更快、减少数据重复、表占用空间小、数据冗余小
  • 范式的缺点:常常需要关联
  • 反范式的优点:避免关联
  • 反范式的缺点:最差的时候要全表扫描

 

posted @ 2020-12-30 17:34  Tracydzf  阅读(105)  评论(0)    收藏  举报