码迷,mamicode.com
首页 > 数据库 > 详细

mysql数据库调优

时间:2015-07-25 23:10:10      阅读:347      评论:0      收藏:0      [点我收藏+]

标签:

最近新到项目上,算是帮忙,遇见性能测试。

测试要求其实不高,现在是单mysql数据库,未分表,四千万数据,四百毫秒,上的压力是一千一百多tps,但是,动态的只占到了百分之二十左右,也就是两百左右的tps吧。服务器还是比较牛逼的,我看到了十几个cpu线程,估计超过一百G内存吧。

大体情况如上。

鄙人之前没优化过mysql,其实,是没调优过sql,只读过部分sql执行的原理,数据库的结构啥的,平常写sql和设计表的时候有些注意,实战调优经验为零,以前就算调了,没测试过,也白搭,这次算是逮到便宜了。

废话说了不少,说说具体的问题吧。

首先,是如何分析sql慢的具体原因。

在mysql下,数据库引擎要注意,我们用的是innodb,行锁。

其实,我主要用到的,就是explain,这个东西可以帮助我分析sql的具体执行情况。

我主要看的,还是行数那一列,看看它执行的时候遍历了多少行。这个数量直接会影响到速度。当然,其它的也很有用,不是看的太懂,半猜着来的。

一般的方法,就是给查询的很多的那个列加索引。

主要是给,where的条件,join的条件,另外就是,这里不用都加,索引是有代价的。给主要的加上,在执行sql的时候,达到减少遍历行数的目的就好了

我本机测试,四千万的数据的表,插入一条数据需要不到两百毫秒,这是在有一个normal btree索引的时候是这样的,所以,代价还是蛮大的。

按理说,这个数量级其实是需要分表的。根据我的这次的经验,一千万左右的时候,就该分了,否则,各方面是有影响的。

另外就是优化sql。

主要思路是sql对具体的语句的执行顺序,尽量让限制性的sql能够将数据范围变小,这样,在各种join和where的时候速度才能快点。

排序,group by这种操作,尽量放在最后执行,因为这种操作比较耗时,需要便利当前的所有数据。

另外就是,在行间的select尽量不要使用,如果可以的话,换成join,因为行间的sql会根据行数执行。

应该总是限制返回的结果数量。如果返回的结果数量,如果返回过多的话,无论怎么优化,都会很慢,你可以尝试对四千万的表select *

另外就是,在对列数很多的表做查询的时候,尽量不要使用*,这个还是有效率影响的,只列出来你需要的列,效率会更高。


写得比较凌乱,多数是一些建议,思路,具体的内容,在网上,书上,很容易找到。


mysql数据库调优

标签:

原文地址:http://my.oschina.net/u/1778412/blog/483739

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!