[英]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.