对于数据库优化的理解

338 阅读2分钟

数据库层面

1 分库

把大数据量的库存到多个库中,两个库使用完全相同的表结构,通过时间戳字段把某段时间的内容分别存到多个库中

2 分区

指的是在一张表上分区,有个明显的弊端,需要分区索引,有多个分区有多个分区索引,这个时候查的时候不走分区索引,而只走表索引会造成全表锁,所以不建议采用分区

3 分表

  • 水平分表,和分库类似,大数据量的内容放到多个表中
  • 垂直分表,经常查的放到一张表,不经常的放到另一个表

缓存方面

缓存redis,mongodb存储日志文件

Sql语句优化

  • 不使用*
  • 从出发角度考虑,以什么角度查,比如两个表联查,这个表10条,那个1000条,一定要先从小的范围查大的范围,因为从小的查一共就10条,从大的查1000条,效率肯定更低
  • 注意笛卡尔积,如果忘写条件,会查出大量数据,给数据库增压
  • 一些关键字要注意,比方说in指包含,可以使用exist代替,比如后边有3条数据(id 5 6 7),可以用between 5 and 7,再有or ,一般千万不要使用,他会全表查询 一般用union 代替,但他有去重效果,使用union all,看业务场景
  • 应尽量避免在 where 子句中对字段进行 null 值判断,这点一般在设计数据表时,应该考虑给默认值,避免null的出现
  • 使用like的时候不要在前边加通配符,会导致索引失效 等

业务逻辑

  • 比方视图、函数、存储过程,比方说10张表的内容在一个页面展示,要是关联查询效率就会很低,这时候我们建立视图,就不用做关联了,直接查到想要的数据。
  • 函数,if 判断什么的放到数据库中,但是不建议使用,给数据库增大压力,我们可以在java中写
  • 存储过程的话,里面可以放视图、函数等等复杂语句,但调用简单,方便java代码调用,可以将存储过程提供给第三方厂商,实现接口对接

冷备份热备份

  • 冷备份,数据库和项目在不运行时进行备份,出现错误进行数据恢复
  • 热备份,每次增加或修改或删除的时候都进行热备份,但不建议使用,因为出现错误不能回退