自己的mysql进行优化经历

这两天项目里出现了部分的性能问题,尤其是有个自己负责的模块性能问题很严重,只好做一下sql优化。

但是sql优化自己从来没有做过,眼看着一条sql语句占满了屏幕的十多行,都不知道从哪里开始下手,没办法,只好请教组里的数据库牛人来帮忙优化一下了。

下面就讲讲这个优化的过程吧。

首先我们到web服务器上取下来mysql的慢日志,这种形式的日志记录的内容比较全面,里面设置可以找到我们曾经运行过的sql语句。

把需要优化的sql语句拿下来,先用mysql的explain工具查看一下,这个主要就是看sql扫描行的数目,以及是否使用了索引。按照mysql的建议,使用索引可以极大的提升查询效率,这点不容置疑。

结果拿下来我那个模块的sql一运行,发现基本上是对整个数据库表的全表扫描,该用到的索引竟然完全都没有用到,真的不知道为什么,这个肯定会慢得很啊!

后来再看一下数据库表本身有多大,发现总计路数也就才15000多条,按理说这么大的数据量并不会影响性能,但是事实上却因为一些sql语句的写法导致了性能的急剧下降。

首先,对于能够在子查询里面过滤掉的数据,我们最好还是别拿到外面来查询了,子查询的结果集越小,那么我们需要联合查询的集合就越小;

然后就是我们sql语句遇到的最大的性能问题,在使用inner join的同时使用了select子查询,这样据说会导致数据库做笛卡尔积查询,这样的查询方式即使数据量不是很大,那么最后需要扫描的数据行数也是相当的可观的啊!

所以按照大牛的说法,把join保留,把select子查询丢掉,性能会有不小的提升;

于是乎花了两个小时把自己的sql语句全部都改成了这样,调试一下,最后发现程序效率提升的真的不是一点点!

至此,优化算是告一段落了,其它的小部分的优化后续再做吧!


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值