将大型MySQL数据集与PHP进行比较

时间:2011-04-20 20:19:00

标签: php mysql dataset compare

我有一组大约110万个唯一ID,我需要确定哪个在我的应用程序数据库中没有相应的记录。 ID集也来自数据库,但不是同一个。我正在使用PHP和MySQL,并且有足够的内存 - PHP运行在一个15GB RAM的服务器上,MySQL运行在自己的服务器上,内存为7.5GB。

通常我只是在一个查询中加载所有ID,然后将它们与SELECT查询的IN子句一起使用,一次性进行比较。

到目前为止,我的尝试导致脚本需要花费无法忍受的长时间,或者将CPU加速到100%。

加载这么大的数据集并进行比较的最佳方法是什么?

2 个答案:

答案 0 :(得分:3)

从第一个数据库生成ID转储到文件中,然后将其重新加载到第二个数据库的临时表中,并在该临时表和第二个数据库表之间进行连接,以识别那些没有匹配的记录。生成该列表后,您可以删除临时表。

这样,你就不会尝试在PHP本身处理大量数据,所以你不应该有任何内存问题。

答案 1 :(得分:1)

假设您不能加入表,因为它们不在同一个数据库服务器上,并且您的服务器可以处理这个,我会用一个数据库中的所有ID填充一个数组,然后从另一个数据库循环ID并使用in_array查看数组中是否存在每个。

BTW - 根据this,您可以提高in_array的效率。