数据库优化简单了解

JAVA学习文档

数据库优化方法了解

优先级:

架构优化 > 硬件优化 > DB优化 > SQL优化

架构优化:

种类:分布式缓存,读写分离,分库分表

分布式缓存:

类比一下操作系统,在读写速度差距很大的两个区之间设置一个缓冲区(A区读写速度远高于B区),首先A区请求数据时,先看缓冲区是否有请求数据,没有的话将B区数据加载到缓冲区钟,有的话直接将数据从缓冲区中取出。

注意点:需要考虑缓存穿透、缓存击穿和缓存雪崩

读写分离:

部署多台数据库,选择其中一台作为主数据库(Master),其他一台或多台作为从数据库(Slave)。主数据库负责处理写请求,从数据库负责处理读请求,可以提高数据库的并发性,但是会存在Master在同步数据时的延迟问题

水平切分:

当应用业务数据量很大,单库容量成为性能瓶颈后,采用水平切分,可以降低数据库单库容量,提升数据库写性能。

DB优化:

要让一台数据库实例完全发挥其性能,首先我们就得先优化数据库的实例参数。

数据库实例参数优化遵循三句口诀:日志不能小、缓存足够大、连接要够用。

数据库事务提交后需要将事务对数据页的修改刷( fsync)到磁盘上,才能保证数据的持久性。这个刷盘,是一个随机写,性能较低,如果每次事务提交都要刷盘,会极大影响数据库的性能。数据库在架构设计中都会采用如下两个优化手法:

  1. 先将事务写到日志文件RedoLog(WAL),将随机写优化成顺序写
  2. 加一层缓存结构Buffer,将单次写优化成顺序写
SQL优化:
  1. 合理使用索引:

    索引少了查询慢;索引多了占用空间大,执行增删改语句的时候需要动态维护索引,影响性能 选择率高(重复值少)且被where频繁引用需要建立B树索引;一般join列需要建立索引;复杂文档类型查询采用全文索引效率更好;索引的建立要在查询和DML性能之间取得平衡;复合索引创建时要注意基于非前导列查询的情况

  2. 使用UNION ALL替代UNION

    UNION ALL的执行效率比UNION高,因为UNION执行时需要排重;

  3. 避免select * 写法

    执行SQL时优化器需要将 * 转成具体的列;每次查询都要回表,不能走覆盖索引。

  4. JOIN字段建议建立索引

    一般JOIN字段都提前加上索引

  5. 避免复杂SQL语句

    提升可阅读性;避免慢查询的概率;可以转换成多个短查询,用业务端处理

  6. 避免where 1=1写法

  7. 避免order by rand()类似写法

    RAND()导致数据列被多次扫描

硬件优化:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值