对于数据库优化的理解

数据库层面

1 分库

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

2 分区

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

3 分表

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

缓存方面

缓存redis,mongodb存储日志文件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代码调用,能够将存储过程提供给第三方厂商,实现接口对接

冷备份热备份

  • 冷备份,数据库和项目在不运行时进行备份,出现错误进行数据恢复
  • 热备份,每次增长或修改或删除的时候都进行热备份,但不建议使用,由于出现错误不能回退
相关文章
相关标签/搜索