当前位置:  开发笔记 > 编程语言 > 正文

如何加快Mysql和PHP的速度?

如何解决《如何加快Mysql和PHP的速度?》经验,为你挑选了1个好方法。

我正在使用PHP和mysql在我的localhst中开发一个脚本,我正在处理大数据(大约有2百万条用于科学研究的记录)

我需要在生活中调用一些查询(分析数据并准备一些数据); 但是例如需要很长时间:现在我的脚本正在分析一些数据超过4个小时

我知道我的数据库优化可能会有一些问题我不是专家

例如,我只是发现"索引"对于加速查询很有用,但即使索引某些列我的脚本仍然很慢

任何想法如何加快我的脚本(在PHP和MySQL中)

我使用XAMPP作为服务器包

非常感谢您的帮助

最好的祝福

更新1:

我的慢速脚本的一部分需要4个多小时来处理

$sql = "select * from urls";//10,000 record of cached HTML documents
$result = $DB->query($sql);
while($row = $DB->fetch_array($result)){
$url_id = $row["id"];
$content = $row["content"];

$dom = new DOMDocument();
@$dom->loadHTML($content);
$xpath = new DOMXPath($dom);
$row = $xpath->evaluate("/html/body//a");

for($i = 0; $i < $row->length; $i++) {
     // lots of the code here to deal with the HTML documents and some update and insert and select queries which query another table which has 1 million record
}

更新2:

我的quires中没有"JOIN"甚至"IN"

它们是非常简单的查询

而且不知道!我不知道怎么知道导致缓慢的原因是什么?

是PHP还是MYSQL?



1> Pascal MARTI..:

首先,为了能够有效地进行优化,您需要知道花时间:

PHP做了太多的计算?

你有太多的SQL查询吗?

你有SQL查询需要花费太多时间吗?

如果是的话,哪些?

你的脚本在哪里花费时间?

有了这些信息,您可以尝试弄清楚:

如果你可以减少SQL查询的数量

例如,如果你一遍又一遍地做同样的查询,你显然是在浪费时间

另一个想法是"重新组合"查询,如果可能的话; 例如,只使用一个查询来获得10行,而不是10个查询都获得一行.

如果您可以优化花费太长时间的查询

使用索引 - 那些有用的索引通常取决于您使用的连接和条件

或重写问题,如果他们是"坏"

关于select语句的优化,你可以看一下:7.2.优化SELECT和其他语句

如果PHP进行了太多计算,你可以减少计算吗?

也许不会一次又一次地重新计算类似的东西?

或者使用更有效的查询?

如果PHP花费时间,并且SQL服务器没有过载,使用并行性(同时启动多个计算)也可能有助于加快整个过程.

仍然:这是一个非常具体的问题,答案可能也非常具体 - 这意味着如果你想要的不仅仅是一般性答案,那么可能需要更多的信息.​​.....


编辑后进行编辑

因为你只有简单的查询,事情可能会更容易......也许吧.

首先:您需要确定您正在进行的查询类型.

我猜,在你所有的查询中,你可以识别一些"类型"的查询.

例如:" select * from a where x = 12"和" select * from a where x = 14"具有相同的类型:相同的select,相同的表,相同的where子句 - 只有值更改

一旦您知道哪些查询被最多使用,您就需要检查它们是否已经过优化:使用EXPLAIN会有所帮助

(如果需要,我确信有些人能够帮助你理解它的输出,如果你提供它与你的数据库(表+索引)一起提供)

如果需要:创建正确的索引 - 这是一种硬/特定部分^^

对于那些减少查询数量的查询也可能有用......

当你完成经常使用的查询时,是时候进行花费太长时间的查询了; 使用microtimePHP将帮助您找出那些是什么

另一个解决方案是使用5.2.4.慢查询日志

当您识别出这些查询时,与之前相同:优化.


在此之前,要了解PHP是否工作太多,或者它是否是MySQL,一种简单的方法是在Linux上使用"top"命令,或者"进程管理器" (我不在Windows上,而不是在英语中使用它 - 真实姓名可能是其他的东西).

如果PHP正在吃100%的CPU,那么你就有罪魁祸首.如果MySQL正在吃掉所有的CPU,你也有罪魁祸首.

当你知道哪一个工作太多时,这是第一步:你先知道要优化什么.


我从你的代码部分看到你是:

逐个浏览10,000个元素 - 应该很容易将它们分成2个或更多个切片

使用DOM和XPath,这可能会占用PHP端的一些CPU

如果你有一个多核CPU,一个想法(我会尝试,如果我看到PHP正在吃大量的CPU)将并行化.

例如,您可以同时运行两个PHP脚本实例:

一个将处理前半部分的URL

这个的SQL查询将像" select * from urls where id < 5000"

另一个将处理URL的后半部分

它的查询将像" select * from urls where id >= 5000"

您将在网络上获得更多并发(可能不是问题)和数据库(数据库知道如何处理并发,并且使用它的2个脚本通常不会太多),但您将能够在同一时间处理几乎两倍于相同数量的文档.

如果你有4个CPU,将urls-list分成4个(甚至更多;通过反复试验找出)部分也会这样做.

推荐阅读
放ch养奶牛
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有