优化MySQL联合索引和WHERE子句提高数据库操作效率

由于网站系统已在线,数据量已经在不知不觉中5亿,几乎8w已记录。相关数据库的操作基本上是非常缓慢的,人们会觉得不耐烦把这火~ ~然后粘贴在一组,其中包括机器配置什么,马上说一群朋友,但也帮助我确定不是机器配置问题,深圳-他的心热枪手512 100瓦机内存数据也跑得快,甚至那些几W块机牛(夸张的),呵呵~ ~ ~

在朋友的指导组的分析,尝试排序,条件去除做试验,结果发现,问题出在排序部分,除去排名,从48秒到0.3x秒的执行时间,这是一个变化在什么年级~ ~看结果我ing…

所以我把领域涉及排序形成一个综合指标表XX添加索引(X1,X2,X3),2分钟后创建一个新的索引,然后执行相同的SQL语句,0.28s哇…酷

因此,同样的,其他常用的SQL进行了优化,效果立即生效。

30分钟后检查慢SQL记录文件,不好,发现好的SQL变灰常慢,神的情况。

经过多次分析和测试,这是因为增加了一个联合索引的原因,并且有一个或在SQL语句中。当或改变为联合时,问题被排除在外。

这一次得出了一个结果:当你暂时不写SQL时,只要写一个OK,就会给思维带来非常严重的后果。

附加WHERE子句的执行顺序。

当你用mysql查询数据库时,它连接了很多用途,发现它非常慢:

选择…在p.languages_id = 1和m.languages_id = 1和c.languages_id = 1和t.languages_id = 1和p.products_id在(472474)

这个查询花费了超过20秒的时间,尽管每个字段都建立了索引,通过对解释SQL的分析,发现在第一次分析中返回了成千上万的数据。

在p.languages_id = 1,然后根据条件,缩小范围。

当我改变位置的位置时,速度明显地提高了。

在p.products_id在(472474)和p.languages_id = 1和m.languages_id = 1和c.languages_id = 1和t.languages_id = 1

在这种方式中,第一个条件是p.products_id在(472474),其中收益率低于10,然后过滤器根据其他条件,具有速度大大提高。

经过实践,发现不认为字段顺序在哪里无关紧要,你可以把它放在任何地方,你应该第一次过滤掉大部分无用的数据,只返回最小的数据范围。

我希望能帮助有相同经验的朋友。