我有大数据库。它大约有1万个字符串。我需要做这样的事情:
select * from t1 WHERE id1 NOT IN (SELECT id2 FROM t2)
但它的效果很慢。我知道我可以使用" JOIN"语法,但我无法理解。
答案 0 :(得分:5)
尝试这种方式:
select *
from t1
left join t2 on t1.id1 = t2.id
where t2.id is null
答案 1 :(得分:2)
首先,您应该优化两个表中的索引,然后使用join
答案 2 :(得分:0)
dbms可以通过不同的方式处理此任务:
它可以从t2中选择id2然后选择所有t1,其中id1不在该集合中。你建议使用IN子句。
它可以从t1中选择记录记录,如果在t2中找到匹配项,则查找每条记录。您可以使用EXISTS条款来建议这一点。
您可以外连接表然后丢弃所有匹配并保留不匹配的条目。这可能看起来很糟糕,特别是当有很多匹配时,因为你会获得大的中间数据,然后把大部分数据扔掉。但是,根据dbms的工作方式,它可能会相当快,例如,当它应用散列连接技术时。
这完全取决于表大小,匹配数,索引等,以及dbms对查询的影响。有些dbms能够完全重写您的查询以找到最佳执行计划。
说完这一切之后,你可以尝试不同的事情: