SQL Left Join需要12分钟

时间:2016-01-18 21:08:42

标签: mysql

我想要比较两个表。这些表是相同的结构,应该完全相同,每个表有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

1 个答案:

答案 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的更多信息。

希望这有帮助

注意:不确定与原始查询相比,可以看到多少性能提升。