【数据库优化】

数据库优化

一,分布式缓存

        当需要在架构层进行优化时第一时间就应该想到缓存,在应用与数据库之间增加一个缓存服务,如Redis。

        当接收到查询请求后,我们先查询缓存,判断缓存中是否有数据,有数据就直接返回给应用,如若没有再查询数据库,并加载到缓存中,这样就大大减少了对数据库的访问次数,自然而然也提高了数据库性能。

        不过需要注意,引入分布式缓存后系统需要防止缓存穿透、缓存击穿和缓存雪崩的问题。

        缓存穿透:外部绕过缓存直接访问数据库。

        解决方法:请求必须先进缓存 或直接拦截非法请求(布隆过滤器,把null对象也放入缓存,设置短的过期时间。

        缓存雪崩:多个缓存同时过期,造成瞬时高并发访问数据库。

        解决方法:给缓存设置随机过期时间,不让缓存同时过期。

        缓存击穿:大并发的持续查询相同条件。

        解决方法:设置竞争锁(注意不要出现死锁

二,主从分离

         一主多从,读写分离,主动同步。

        当请求是读多写少,数据库扛不住读压力的时候,采用读写分离,通过增加从库数量可以线性提升系统读性能。

        主库,提供数据库写服务;从库,提供数据库读能力。

三,拆表

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

        通过mycat中间件配置。可以让mycat对一些数据进行多个主从的复制,有多个主从数据进行同步,当有一个主机坠机的时候,另外的主机进行切换保障数据安全。

四,SQL优化

        查询SQL尽量不要使用select *,而是具体字段
        避免在where子句中使用or来连接条件
        使用varchar代替char
        尽量使用数值替代字符串类型
        查询尽量避免返回大量数据
        是否使用了索引及其扫描类型
        创建name字段的索引
        优化like语句
        索引不宜太多,一般5个以内
        索引不适合建在有大量重复数据的字段上
        where限定查询的数据
        避免在索引列上使用内置函数
        避免在where中对字段进行表达式操作
        避免在where子句中使用!=或<>操作符
        去重distinct过滤字段要少
        where中使用默认值代替null

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值