MySQL表设计和数据类型优化

  1. 范式化设计
    1. 第一范式:每列属性都是不可再分的属性,确保每列的原子性
    2. 第二范式:要求实体属性完全依赖于主关键字,也就是说每一行要求有一个唯一性的业务主键
    3. 第三范式:表中不包含已在其它表中的非主键列,即数据不能存在传递关系,每个苏醒都跟主键有直接而不是间接关系
  2. 反范式设计
    1. 为了性能和读取效率适当违反范式设计,允许存在少量冗余数据,用空间换时间
    2. 查询分类描述需要三次,发现商品名称出现分类名称必然出现,那么冗余分类名称列减少查询次数

  1. 范式设计和反范式设计对比
    1. 范式设计有点修改操作较少,表大小较小,缺点是表关联多
    2. 反范式设计减少表关联,更好进行索引优化,缺点是数据冗余,修改数据操作较多
    3. 尽量使用范式设计,当实际中表关联多效率低时候,那么进行反范式设计
    4. 反范式设计
      1. 性能提升-冗余、缓存和汇总,比如单独建立汇总表,晚上跑定时任务
      2. 性能提升-计数器表,比如要计算网站点击数,可以单独建立一张计数器表,再优化可以将本来在一行修改点击数,拆分为多行点击数据,修改多行数据;也可以使用LongAddr,多个槽位写数据,最后汇总方式来分散写热点
      3. 反范式设计-分库分表中的查询,比如买卖东西,将交易信息根据用户维度和商品维度各建立一份
  2. 字段数据类型优化
    1. 满足业务情况下最小的数据类型
    2. 越简单越好,即可以用字符串又可以用整形,那么用整形
    3. 尽可能让列not null
    4. 整数类型:Tiyiint、smallint、int、bigint(long)
    5. 实数类型:Float4个字节存放,double8个字节存放,decimal允许存放65个数字,但是性能相对前面两个较慢,可以优化可以转化为整数用Bigint存储
    6. 字符串类型
      1. varchar:列更新比较少,多字节,但是定长度时候定的短更好
      2. char:所有值都定长或者接近某一长度,例如姓名、性别、身份证号、MD5
      3. blob,text,当使用时候尽量把字段拆分出一张表
      4. 必要时使用枚举代替字符串,比如是固定的几个字符串,数字字符串不要搞成枚举
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值