我有很大的DB。它大約有一百萬根琴絃。我需要這樣做:如何使SQL查詢更快?
select * from t1 WHERE id1 NOT IN (SELECT id2 FROM t2)
但它的工作非常緩慢。我知道我可以使用「JOIN」語法來完成,但我無法理解。
我有很大的DB。它大約有一百萬根琴絃。我需要這樣做:如何使SQL查詢更快?
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
中選擇column1,column2#1317 - 查詢執行中斷 –
,首先你應該優化索引兩個表中,在那之後,你應該使用加入
有不同的方式DBMS可以處理這個任務:
它可以選擇從T2 ID2,然後選擇所有T1,其中ID1是不是在該組。你使用IN子句建議這個。
它可以記錄從t1選擇記錄,並尋找每一條記錄,如果它在T2找到一個匹配。你會使用EXISTS子句來建議這個。
可以外連接的表,然後扔掉所有比賽,並保持與非匹配的條目。這可能看起來像一個糟糕的方式,尤其是當有很多比賽,因爲你會得到很大的中間數據,然後扔大部分路程。但是,取決於dbms的工作方式,它可以相當快,例如,當它應用散列連接技術時。
這一切都取決於表的大小,比賽,索引等的數量和對DBMS讓你查詢一下。有dbms能夠完全重寫你的查詢來找到最佳的執行計劃。
說了這麼多,你可以嘗試不同的事情:
檢查parado的答案,而不是使用選擇*,只需選擇你需要的列。例如。從... –