Updated at 2020-12-01 19:17

整数类型

  1. tinyint、smallint、mediumint、int、bigint,其它的类型都是别名,它们分别占用8、16、24、32、64位空间,能存储的最大范围越来越大
  2. 考虑性能的话,优先选更小的类型,除非最大范围不够用;否则使用int往往不会错
  3. 是否unsigned,对性能无影响
  4. int(1)和int(11),对性能无影响

实数类型

  1. 基本没有使用floatdouble的场景

  2. 存储精确的小数时,选用decimal,除非过早的版本,decimal支持高精度运算,运算速度不如浮点运算

  3. 金额类字段考虑使用整数类型

    例如,10.01可以存储成1001,约定以“分”代替“元”进行存储,计算代价小

字符串类型

  1. 考虑性能,并且能确定该字段的大部分数据都是定长的,使用char,否则varchar

  2. binaryvarbinary是二进制版本的charvarchar,存储的是字节码,使用\0而不是空格填充

  3. 尽量预估数据可能的最大长度,给varchar安排真正需要的空间

    因为varchar(200)虽然和varchar(10)存储同一个字符串空间开销是一样的,但是更短的列会消耗更少的内存,利用磁盘临时表排序时性能也更好

“时间”类型

  1. datetime可以存储1001年到9999年范围,精度为秒,无时区,本质上是以YYYYMMDDHHMMSS形式的整数存储的
  2. timestamp可以存储1970年到2038年范围,精度为秒,显示会与时区有关,比datetime类型占用更少的空间

冗余逻辑外键的逻辑外键

例如订单order、订单商品item、订单SKUskuorderitem是n对n的关系,itemsku是1对n的关系。


MySQL      MySQL