MySQL优化查询不在

时间:2013-07-04 05:40:23

标签: mysql

我有一个使用VBA程序的Excel,它连接到MySQL数据库以检索一些信息。最初,当程序加载时,我有以下查询。

SELECT A.id,A.first_name,A.last_name FROM Table1 A WHERE A.ID NOT IN(SELECT DISTINCT  
SUBJECT FROM Table2)

表1具有如下数据。

  • 1 Christian Bale
  • 2 Christopher Nolan

表2具有如下数据。

  • 1 acted_in Batman
  • 2执导蝙蝠侠

只要表2中的总行数较少,上面给出的查询就完全正常。但是,目前我的数据在表1中有26000行,在表2中有102000行。所以,当我在我的运行上运行上面的查询时程序,执行查询大约需要半个小时,有时它无法正常执行。我也尝试了以下查询,但也需要很长时间。

SELECT  A.id, A.first_name, A.last_name FROM Table1 a 
WHERE   NOT EXISTS
(
    SELECT  1
    FROM    Table2 al
    WHERE   a.id = al.subject
)

是否有一种有效的方法来重新定义查询?

3 个答案:

答案 0 :(得分:4)

使用外部联接

SELECT A.*
FROM Table1 a
LEFT OUTER JOIN (SELECT DISTINCT subject
            FROM Table2) b ON a.id = b.subject
WHERE b.subject IS NULL

答案 1 :(得分:0)

与其他提供的答案类似,但是通过直接链接到表而不是SELECT DISTINCT上的内联视图,查询可能表现更好:

SELECT t1.*
FROM Table1 t1
LEFT JOIN Table2 t2 ON t1.id = t2.subject
WHERE t2.subject IS NULL

答案 2 :(得分:0)

查询:

SELECT a.*
FROM Table1 a
WHERE NOT EXISTS (SELECT subject
                  FROM Table2 b
                  WHERE a.id = b.subject)