自己的mysql进行优化经历

来源:互联网 发布:115会员淘宝在哪买 编辑:程序博客网 时间:2024/06/04 01:02

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

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

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

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

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

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

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

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

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

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

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

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


原创粉丝点击