我有一个沉重的脚本,我们运行充足。以下是使用的算法:
从数据库加载4500行并将其存储为数组。 (A)
从数据库加载600000行并将其存储为数组。 (B)
对于(A)中的每个元素,在(B)中查找匹配。
转到(A)
因此,此脚本的最大迭代次数为4500 * 60 000,即270,000,000,因此您可以理解这对于PHP来说可能有些出汗。
我能以某种方式提高这个过程的效率吗? 从数据库中读取行并不是一个问题,因为数组迭代会带来沉重的成本。
它确实工作得非常快,但在未来几年中,一个因素(60000)会大大增加。
所有想法?
答案 0 :(得分:1)
以下是一些不同的答案。我的猜测是第一个是正确的, 简单而且充足,但很难确定。
正如评论所表明的那样听起来非常像一个加入。另外你的帖子似乎 表示您只在找到匹配时才执行操作,而不是每个元素 在A中有一场比赛。这意味着您的SQL语句应该只返回匹配的行,而不是 他们都是。如果你可以放手,你无法做我所做的一切都没关系 为您整理数据。
也许您可以对数组进行排序(再次,最好让您的数据库执行此操作)。可能是你 可以对B进行排序,以便更快地搜索匹配。或者将搜索值放在关键字中 数组,以便搜索非常快。或者如果你很幸运,你可以对两者进行排序 数组的方式使得所有A和B的顺序相同。即对于任何A你选择你 知道正确的B要么不存在,要么在B数组中稍后存在。
您只向我们提供了您当前的算法,而不是您实际尝试的算法。最 可能迭代一切并不是最好的主意,但除非他们知道,否则没有人可以说 更多关于您的数据以及您最终想要做的事情。
答案 1 :(得分:1)
这取决于您的数据,当然......
一些一般方面:
如果你真的必须使用php脚本函数试试
如果您匹配整个单词,请以这种方式构建匹配的数组,搜索条件是键,而不是值,以便您可以使用isset($potentialMatches[$searchTerm])
,这比{更快} {1}}用于较大的数组。样机:
while($ row = $ resultSet-> fetch_assoc()){ $ potentialMatches [$ row [' search_column']] = $ row; }
但它不够强调:处理这个问题的通常做法是: