mysql性能优化(二)

Profiling(DBA)

使用profiling可以查看sql的占用CPU ,I/O的使用情况,具体的使用方法为:
1.set pfofiling=1;
2.select XXXXXXXXX (需要分析的sql)
3.show profiles;
之后就会出现对应的查询序列的ID,有对应的cpu占用的时间
在这里插入图片描述
4.show profile cpu,block,io for query xx;
在这里插入图片描述
会有状态信息,io.cpu等等信息

了解Join的底层逻辑实现原理

简要文字说明:首先我们会先查询驱动表,然后根据驱动表的查询结果区轮询被驱动表,具体的实现逻辑如下

在这里插入图片描述

如何优化Join

在这里插入图片描述
1.尽量使用小结果集,驱动大结果集
原因:Join的底层逻辑决定了,驱动表的结果会遍历轮询被驱动表,如果驱动表的数据集很大,那么遍历次数就会很多了
2.保证被驱动表的Join字段是被索引到的
原因:他是有驱动表根据join段的值区查询表的,如果是join的索引到的字段,他就走索引,提高查询效率
3.加大Join Buffer
原因:多表Join的时候,会用到Join Buffer,如果不够大,它会进行分段,会消耗I/O

order by的底层原理

如果排序字段是索引字段,那么我们都是走索引的:
原因:我们Innodb底层的索引实现方式B+Trees,B+Trees中,数据都摆放在叶子节点里面,而且是一个接一个有序的
在这里插入图片描述
在这里插入图片描述
非索引字段,我们就不走索引了
在这里插入图片描述
order by非索引的底层实现原理有两种实现方式,如下图:
在这里插入图片描述
第二种方式,用空间换时间:
在这里插入图片描述

如何优化order by

1.在这里插入图片描述
1.排序字段尽量所用我们的索引字段
原因:我们Innodb底层的索引使用的B+Trees,它的数据存放在叶子节点,且有序的
2.加大max_length_for_sort_data,
原因:从而使用第二种方式,空间来换时间
3.去掉不必要的字段
原因:排序会把需要的字段加载到内存,消耗IO
4.增大sort_buffer_size
原因:减少分段

Group by是根据order by做的

DISTINCT是根据Group by做的

总结思考如何思考mysql性能优化:

1.具体的思考流程
在这里插入图片描述
2.如何开启慢查询日志:
在这里插入图片描述
最后说一句:不是所有的MySQL性能问题都可以通过优化MySQL来解决的,有事在应用层面,业务层面来思考也是很必要的

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值