设计中间表,一般针对于统计分析功能,或者实时性不高的需求(OLTP、OLAP)
有些统计功能关联很多表,计算量特别打的时候,对实时性要求不高的话,可以设计一张单标,使用定时任务,在并发量小的时候将它们计算起来,插入或更新到一张表中,这时候就是简单地单表查询了,用户体验感会好很多
为减少关联查询,创建合理的冗余字段
有些字段不经常改变,可以创建到从表的字段中,比如订单,关联的user_id,可以把用户的名字字段创建过去,查询的时候就少关联一张表了。考虑数据库的三范式和查询性能的取舍,创建冗余字段还需要注意数据一致性问题
合适的情况下使用缓存
有些字段不经常变化,可以放到缓存里边,这样查询会比较快,还可以解决一致性问题
对于字段太多,考虑拆表(比如一个表有100多个字段)
字段太多的表,有时候页面上没必要读出那么多的数据,就可以将这些字段拆出来单独提到一张表中,尤其是二进制字段clob、blob,大文本字段 text,有这些字段扫表很慢(即使select不加该列,也是结果集没有返回该列的数据,索引树上有那个数据),可以将这些列拆出来,和主键相关联,使用的时候用异步加载,要是一块儿的话还是影响性能的。还是得根据业务,拆成常用的和不常用的。不过这样子再怎么拆,主表和从表都是那么多条记录,拆了后表空间还增大了,所以还可以水平拆分(后面文章记录)
主键
主键类型最好是int类型,建议自增主键,(分布式系统的情况下可以考虑雪花算法)