2013-05-09 54 views
0

如何比较两个包含数百万条记录的MySQL数据库表的两列?我基本上比较TableA和TableB的电话号码。 TableA中的数字将根据TableB中的数字进行检查,如果找到,则会删除重复的数字。由于返回的数字存储在数组中,因此我使用了array_intersect($array1, $array2)。这将返回重复的数字,但问题是它消耗太多内存并需要永久执行。在PHP中比较两列和数百万条记录

有没有办法做到这一点,而不占用太多的内存?表A和表B中包含的数字各超过1000万。

+2

在mysql方面比较。 – Aris 2013-05-09 19:50:46

回答

2

您可以使用此查询,这将返回同时存在于表A和表B中的所有数字:

SELECT DISTINCT TableA.Number 
FROM TableA INNER JOIN TableB 
    ON TableA.Number = TableB.Number 
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 
+0

谢谢你们的答案。最重要的是,TableB记录(数字)由REST API返回,并与本地数据库中现有的TableA编号进行核对。 – BenI 2013-05-09 21:16:07

+0

@BenjaminIgbokwe您正在收到一个REST响应,其中有数百万条记录? – 2013-05-09 22:14:04

+0

没错,JSON响应。所以我的问题是减少交叉存储在数组中的db结果所花费的时间量。 – BenI 2013-05-09 22:41:24