比较PHP中具有数百万条记录的两列
如何比较MySQL db表返回的两列,每列包含数百万条记录?我基本上是比较表A和表B中的电话号码。将对照表B中的数字检查表A中的数字,如果发现重复的数字,则删除。我使用了比较PHP中具有数百万条记录的两列,php,mysql,memory-management,Php,Mysql,Memory Management,如何比较MySQL db表返回的两列,每列包含数百万条记录?我基本上是比较表A和表B中的电话号码。将对照表B中的数字检查表A中的数字,如果发现重复的数字,则删除。我使用了array\u intersect($array1,$array2),因为返回的数字存储在数组中。这将返回重复的数字,但问题是它占用了太多内存,并且需要永远执行 有没有不消耗太多内存的方法?表A和表B中包含的数字各超过1000万。您可以使用此查询,它将返回表A和表B中存在的所有数字: SELECT DISTINCT TableA
array\u intersect($array1,$array2)
,因为返回的数字存储在数组中。这将返回重复的数字,但问题是它占用了太多内存,并且需要永远执行
有没有不消耗太多内存的方法?表A和表B中包含的数字各超过1000万。您可以使用此查询,它将返回表A和表B中存在的所有数字:
SELECT DISTINCT TableA.Number
FROM TableA INNER JOIN TableB
ON TableA.Number = TableB.Number
您可以使用此查询,它将返回表A和表B中存在的所有数字:
SELECT DISTINCT TableA.Number
FROM TableA INNER JOIN TableB
ON TableA.Number = TableB.Number
你不想把那么多数据读入内存。为什么不在SQL中完成这一切 如果要查找表A中不存在于表B中的所有记录,请执行以下操作:
SELECT a.field
FROM
table_a AS a
LEFT OUTER JOIN table_b AS b
ON a.field = b.field
WHERE b.field IS NULL
如果要删除A中与B中不匹配的所有行,也可以在SQL中轻松地执行此操作:
DELETE a
FROM
table_a AS a
LEFT OUTER JOIN table_b AS b
ON a.field = b.field
WHERE b.field IS NULL
你不想把那么多数据读入内存。为什么不在SQL中完成这一切 如果要查找表A中不存在于表B中的所有记录,请执行以下操作:
SELECT a.field
FROM
table_a AS a
LEFT OUTER JOIN table_b AS b
ON a.field = b.field
WHERE b.field IS NULL
如果要删除A中与B中不匹配的所有行,也可以在SQL中轻松地执行此操作:
DELETE a
FROM
table_a AS a
LEFT OUTER JOIN table_b AS b
ON a.field = b.field
WHERE b.field IS NULL
在mysql端进行比较。在mysql端进行比较。感谢大家的回答。实际上,TableB记录(数字)由REST api返回,并与本地数据库中现有的TableA数字进行检查。@BenjaminIgbokwe您收到的REST响应中有数百万条记录?没错,是JSON响应。因此,我的问题是减少了与存储在数组中的db结果相交所需的时间。@BenjaminIgbokwe这太疯狂了。为什么要在API调用中传递那么多数据?听起来你的系统中有更基本的问题,因为即使每条记录只消耗少量字节,你说的是在内存中占用几MB来存储数据,再加上必须保存在内存中的来自DB的类似大小的数据,另外,您还需要花费一些时间来读取REST响应和DB结果集到内存中。我真的希望这个过程不是一个必须以合理的执行时间定期运行的过程。谢谢你们的回答。实际上,TableB记录(数字)由REST api返回,并与本地数据库中现有的TableA数字进行检查。@BenjaminIgbokwe您收到的REST响应中有数百万条记录?没错,是JSON响应。因此,我的问题是减少了与存储在数组中的db结果相交所需的时间。@BenjaminIgbokwe这太疯狂了。为什么要在API调用中传递那么多数据?听起来你的系统中有更基本的问题,因为即使每条记录只消耗少量字节,你说的是在内存中占用几MB来存储数据,再加上必须保存在内存中的来自DB的类似大小的数据,另外,您还需要花费一些时间来读取REST响应和DB结果集到内存中。我真的希望这个过程不是一个必须以合理的执行时间定期运行的过程。