Php 为什么';我的服务器是否尝试使用更多资源进行繁重的mysql搜索?

Php 为什么';我的服务器是否尝试使用更多资源进行繁重的mysql搜索?,php,mysql,nginx,Php,Mysql,Nginx,我有一个大约90k行的mysql表。我编写了一个例程,它循环遍历这些行中的每一行,然后交叉检查另一个表中大约90k行的结果。如果存在匹配项,我将删除其中一行。我交叉检查的所有列都在mysql中建立了索引 当我在一个专用的本地服务器上运行这个脚本时,这个服务器上有2 x quad 2.4ghz intel xeon、24gb的ram(php内存限制设置为12288m)和一个SSD,整个脚本大约需要一分钟才能完成。我会想象服务器资源已经耗尽,但实际上CPU的空闲率约为93%,ram的利用率约为6%,

我有一个大约90k行的mysql表。我编写了一个例程,它循环遍历这些行中的每一行,然后交叉检查另一个表中大约90k行的结果。如果存在匹配项,我将删除其中一行。我交叉检查的所有列都在mysql中建立了索引

当我在一个专用的本地服务器上运行这个脚本时,这个服务器上有2 x quad 2.4ghz intel xeon、24gb的ram(php内存限制设置为12288m)和一个SSD,整个脚本大约需要一分钟才能完成。我会想象服务器资源已经耗尽,但实际上CPU的空闲率约为93%,ram的利用率约为6%,我正在研究SSD上的读/写操作,似乎根本没有发生什么事情

我向另一个人提到了这个问题,他说问题是我正在执行一个单线程进程,并想知道为什么它没有使用全部8个处理器,但即便如此,检查一个mysql表90k次真的很重要吗?是否至少有一个CPU以最大速度运行


为什么我的服务器在运行脚本时不尝试向脚本投入更多资源?或者,我怎样才能释放更多资源,使我的本地web应用程序运行起来不像低规格的VPS?

根据行的大小,90K行不是很多。很可能它们都缓存在RAM中

至于CPU,您的进程不是完全单线程的,但它非常接近。您的进程和DB服务器都是独立的进程,问题当然是,当DB服务器处理请求时,您的进程会停止,因此,无论哪个内核调度了您的进程,都会像DB后台运行的内核一样关闭


正如评论员所提到的,通过将大部分处理工作卸载到DB服务器,您可能可以更高效地完成这项工作。您的大部分时间都花在向服务器发送90K SQL语句的语句开销上。

您是否考虑过编写一个查询,利用您拥有关系数据库的事实,以比二次型更好的时间解决问题?这就是关系数据库的用途。恐怕我还没有涉足那些令人望而生畏的关系数据库领域。我倾向于用php做简单的查询和大部分的跑腿工作,这看起来真的很糟糕。我刚刚研究出如何在mysql中做同样的循环,第一次看到mysql使用了100%的cpu。很酷。干杯