[英]How to make SQL query faster?
我有大数据库。 这大约是一百万个字符串。 我需要做这样的事情:
select * from t1 WHERE id1 NOT IN (SELECT id2 FROM t2)
但是它工作非常缓慢。 我知道我可以使用“ JOIN”语法来做到这一点,但是我不知道该怎么做。
尝试这种方式:
select *
from t1
left join t2 on t1.id1 = t2.id
where t2.id is null
首先,您应该优化两个表中的索引,然后使用join
dbms可以通过多种方式处理此任务:
它可以从t2中选择id2,然后选择id1不在该集合中的所有t1。 您建议使用IN子句。
它可以从t1中逐条记录地选择记录,并在t2中找到匹配项时查找每条记录。 您可以使用EXISTS子句建议这样做。
您可以外部连接表,然后丢弃所有匹配项,并保留不匹配项。 这看起来似乎是一种不好的方法,尤其是在存在许多匹配项的情况下,因为您将获得大量的中间数据,然后将其中的大部分数据丢弃。 但是,根据dbms的工作方式,它可能会相当快,例如,在应用哈希联接技术时。
这完全取决于表的大小,匹配项的数量,索引等,以及dbms对查询的影响。 有些dbms能够完全重写查询以找到最佳执行计划。
说完这些,您可以尝试不同的方法:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.