Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL优化查询不在_Mysql - Fatal编程技术网

MySQL优化查询不在

MySQL优化查询不在,mysql,Mysql,我有一个excel和VBA程序,它连接到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克里斯蒂安·贝尔 克里斯托弗·诺兰 等 表2的数据如下所示 《蝙蝠侠》中的1个角色 2导演蝙蝠侠 等 只要表2中的总行数较少,我上面给出的查询就可

我有一个excel和VBA程序,它连接到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克里斯蒂安·贝尔
  • 克里斯托弗·诺兰
表2的数据如下所示

  • 《蝙蝠侠》中的1个角色
  • 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
)
有没有一种有效的方法来重新表述查询?

使用外部联接

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

与提供的另一个答案类似,但是如果直接链接到表,而不是选择一个独立的表上的内联视图,查询的性能可能会更好:

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


这取决于MySQL版本吗?我得到一个SQL语法错误。修复了它,它应该是左外连接,而不是外连接。
SELECT a.*
FROM Table1 a
WHERE NOT EXISTS (SELECT subject
                  FROM Table2 b
                  WHERE a.id = b.subject)