簡體   English   中英

如何使SQL查詢更快?

[英]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能夠完全重寫查詢以找到最佳執行計划。

說完這些,您可以嘗試不同的方法:

  • IN子句帶有(SELECT DISTINCT id2 FROM t2)。 DISTINCT可以大大減少中間結果,並確實加快查詢速度。 (但是也許您的dbms會這樣做,以獲得良好的執行計划。)
  • 使用EXISTS子句,看看是否更快
  • Parado建議的外部聯接

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM