如何优化MySQL查询以从一个表中获取另一个表中不存在的数据?

zpgglvta  于 2023-02-21  发布在  Mysql
关注(0)|答案(2)|浏览(166)

我有两个名为“table1”和“table2”的MySQL表,其中“table1”包含100万行数据,“table2”包含76万行数据。我想从“table1”中检索“table2”中不存在的所有数据。我尝试在查询中使用左连接,但是查询的执行时间非常长,并且在117965秒之后没有返回任何结果。2我希望得到结果的速度要快得多。
我正在寻找有关如何优化查询或找到更有效的方法来获取结果的建议。有人能帮助我解决此问题吗?
我尝试使用以下查询从table1获取table2中没有的数据:

SELECT t1.part, t2.company 
FROM table1 t1 
LEFT JOIN table2 t2 ON t1.part = t2.part AND t1.company = t2.company 
WHERE t2.company IS NULL;
ne5o7dgx

ne5o7dgx1#

您可以避免JOIN

SELECT 
    t1.part,
    t1.company
FROM 
    table t1
WHERE 
    t1.company IS NULL
fcwjkofz

fcwjkofz2#

table2需要此复合索引:

INDEX(part, company)

(The列的顺序并不重要。)
您也可以使用WHERE NOT EXISTS ( SELECT 1 FROM t2 ... )来表达它,但它可能是相同的速度。
我对你使用SELECT t1.part, t2.company表示怀疑。t2.company必然是NULL。也许你指的是t1.company
以及“想要从“table 1”中检索所有数据”--也许您想要SELECT t1.*

相关问题