比较PHP中数百万条记录的两列

时间:2013-05-09 19:48:44

标签: php mysql memory-management

如何比较从每个包含数百万条记录的MySQL数据库表返回的两列?我基本上是比较TableA和TableB的电话号码。表A中的数字与表B中的数字进行核对,如果找到则删除重复的数字。我使用array_intersect($array1, $array2),因为返回的数字存储在数组中。这会返回重复的数字,但问题是它占用了太多内存并且需要永远执行。

有没有办法在不浪费大量内存的情况下这样做? TableA和TableB中包含的数字各超过1000万。

2 个答案:

答案 0 :(得分:2)

您可以使用此查询,它将返回TableA和TableB中存在的所有数字:

SELECT DISTINCT TableA.Number
FROM TableA INNER JOIN TableB
     ON TableA.Number = TableB.Number

答案 1 :(得分:1)

您不希望将大量数据读入内存。为什么不在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