我想要比较两个表。这些表是相同的结构,应该完全相同,每个表有60,000个条目。但是有些条目不同,我想找到问题。我目前正在尝试对每个人进行左连接并显示结果。我目前正在获得结果,但每个查询需要12分钟。
表1(temp_entries)
ID | File
表2(temp_dir_scan)
ID | File
查询1(12.25分钟)
SELECT A.ID, A.File
FROM temp_entries A
LEFT JOIN temp_dir_scan B ON A.File = B.File
WHERE B.File is Null
查询2(12.26分钟)
SELECT A.File
FROM temp_dir_scan A
LEFT JOIN temp_entries B ON A.File = B.File
WHERE B.File is Null
查询3(11.54分钟)
SELECT A.ID, A.File
FROM temp_entries A
Where A.File not in (select B.File from temp_dir_scan B)
怎么回事?或者我该怎么做才能加快速度呢?什么是合理的时间来完成这个?
以下是结果示例。
1|test.txt
2|test2.txt
45|temp.jpg
答案 0 :(得分:1)
正如评论中所提到的,您可以尝试使用下面显示的表格来执行FULL OUTER JOIN
示例(MySQL没有FULL联接,因此使用UNION来模拟这个)
更新:删除重复的列错误
SELECT C.A_ID
, C.A_File
, C.B_ID
, C.B_File
FROM (
SELECT A.ID AS A_ID
,A.File AS A_File
,B.ID AS B_ID
,B.File AS B_File
FROM temp_entries A
LEFT
JOIN temp_dir_scan B
ON A.File = B.File
UNION
SELECT A.ID AS A_ID
,A.File AS A_File
,B.ID AS B_ID
,B.File AS B_File
FROM temp_entries A
RIGHT
JOIN temp_dir_scan B
ON A.File = B.File
) C
WHERE C.A_File IS NULL
OR C.B_File IS NULL
这个SO post提供了有关在MySQL中执行FULL OUTER JOINS
的更多信息。
希望这有帮助
注意:不确定与原始查询相比,可以看到多少性能提升。