Mysql调优方向

1.选择合适的DBMS

     DBMS分为SQL和NoSQL,应用何种数据库应该从实际出发。

     例如应用场景是大型的项目,对数据的安全性,稳定性,速度都有很高的要求,那oracle会是比较合适的DB,因为oracle是面向企业级的数据库,里面的功能十分齐全,例如索引在我们平常应用中是一个十分重要的应用,如何设定索引是个技术活,oracle就提供了一个auto indexing的功能,它能够通过历史数据,动态的调整索引,数据字典、动态性能视图、TRACE跟踪、AWR、ASH、SQL Monitor等等,功能丰富,强大易用。使IT人员能够清晰知道DB的当下/历史工作状态、性能开销,对it开发人员十分友好,提供了全方位的技术支持,但oracle的价格昂贵

     在当今互联网公司应用的最多的还是Msql,其一是因为开源免费,因为开源,大公司就能从它的底层做出相应的调整,优化,让他适合公司自身业务,而中小对性能要求或许没这么高,而mysql性能其实并不差,而且还支持事务这一重要特性

NoSQL 阵营包括键值型数据库、文档型数据库、搜索引擎、列式存储和图形数据库。这些数据库的优缺点和使用场景各有不同,比如列式存储数据库可以大幅度降低系统的 I/O,适合于分布式文件系统和 OLAP,但如果数据需要频繁地增删改,那么列式存储就不太适用了。

 

2.优化表的设计

1. 我们可以参考三范式原则,这样可以让我们的表更为简洁。

2. 空间和时间是可以互换的,有时候我们可以在表里面加入一些冗余的字段,这样可以获取更快的查询效率

3. 就是类型的选择,如果能够确定数据范围,能选小的尽量选小

 

3.优化SQL语句

优化语句的本质就是通过对SQL语句的替换,获取更高的性能,但本人觉得语句的优化无外乎2个字,索引,所以我们更应该关注的地方是什么情况下会导致索引失效,什么场景下索引是生效的,下面几种是本人在网上找到几种索引失效的场景

1. 语句中带or的,索引会失效,我们可以用union(),union_all()来代替

2. 在like语句中,若语句为like %a,索引会失效,这里如果想做优化,我们可以用elasticserch等全文搜索引擎

3. 最左范围原则,下面以name,age为顺序建立索引,讲下以下4种情况

(1)select * from USER where name=‘xzz’ and age =11;

(2)select * from USER where age=11 and name=‘xzz’;

(3)select * from USER where name >"11" and age=1;

  (4)   select * from USER where name="11" and age > 1;

1,4走索引,2不走,3的话name走索引,age不走索引

4. 不要对索引进行运算操作,运算操作也会使索引失效

5. 索引不存储null值,is null这种操作会使索引失效,如果0值不代表任何意义,我们可以用0值来代替null

6、in 和 not in 也要慎用,否则会导致全表扫描,如:
      select id from t where num in(1,2,3)
      对于连续的数值,能用 between 就不要用 in 了:select id from t where num between 1 and 3

4.库,表的拆分

拆分可分为水平拆分和垂直拆分,垂直拆分其实就是根据业务进行拆分,不同的业务系统都拥有自己的库,这种架构一般适合分布式架构,如rpc就是典型代表,但会造成一个问题,就是一个很小的操作都要进行rpc调用,例如这个操作只是对某个商品的库存的增减,但是因为是2个业务系统,还是要经过rpc等远程方法的调用才能完成,若调用链过长,性能也是一个瓶颈,还有一种就是水平拆分,这体现在同一张表的数据分布在不同的数据库中,这种场景一般大量的io都对同一个表进行操作,而redis等都不能满足功能性的需求,这时候就要进行水平的拆分,但水平拆分我们就要考虑数据一致性的问题,这时候我们就要应用到一些分布式锁例如zookeeper,seatas等

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值