大型MySQL数据集与PHP的比较

大型MySQL数据集与PHP的比较,php,mysql,dataset,compare,Php,Mysql,Dataset,Compare,我有一组大约110万个唯一ID,我需要确定哪些ID在我的应用程序数据库中没有相应的记录。这组ID也来自数据库,但不是同一个数据库。我使用的是PHP和MySQL,内存充足——PHP运行在一台15GB内存的服务器上,MySQL运行在自己的服务器上,该服务器有7.5GB内存 通常,我只需在一个查询中加载所有ID,然后将它们与SELECT查询的in子句一起使用,一次性进行比较 到目前为止,我的尝试已经产生了脚本,要么花费了令人无法忍受的长时间,要么CPU峰值达到100% 加载如此大的数据集并进行此比较的

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

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

到目前为止,我的尝试已经产生了脚本,要么花费了令人无法忍受的长时间,要么CPU峰值达到100%


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

假设您不能加入表,因为它们不在同一个DB服务器上,并且您的服务器可以处理此问题,我将使用一个DB中的所有ID填充一个数组,然后在另一个ID上循环,并在_数组中使用,以查看数组中是否存在每个ID


顺便说一句,根据,您可以提高in_数组的效率。

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


顺便说一句,根据,您可以提高in_数组的效率。

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


这样,您就不会试图在PHP中处理大量数据,因此不会出现任何内存问题。

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


这样,您就不会试图在PHP中处理大量数据,因此您不应该有任何内存问题。

使用左连接而不是not in子句。您应该配置MySQL实例,以便它可以在内存中加载数据集(1.1 mil应该可以轻松装入7.5gb的ram),然后按照nick说的做,使用左连接而不是不在中。它的效率更高,查询速度也应该非常快。使用左连接而不是not in子句。您应该配置MySQL实例,以便它可以将数据集加载到内存中(1.1 mil应该可以轻松装入7.5gb的ram),然后按照nick说的做,使用左连接而不是not in。它的效率更高,而且查询速度应该非常快。