2014-02-07 49 views
-1

我有2個表格,TABLEATABLEB查找2張大型表格之間的重複項目

這些含有幾乎相同的數據,90,000條記錄(30場)

有一個場,caller_id,既表所示。

我想要做的是找到中TABLEB的記錄。

目前,我有以下幾點:

SELECT * FROM TABLEB 
WHERE caller_id IN (SELECT caller_id FROM TABLEA) 

這個查詢慢得令人難以置信(接管2分鐘),這是不理想的

有沒有一種方法可以讓我有可能加速這個嗎?

感謝

UPDATE

1 SIMPLE b ALL NULL NULL NULL NULL 11719 NULL 
1 SIMPLE a ALL NULL NULL NULL NULL 11719 NULL 

回答

0

你的表沒有那麼大。試試這個辦法:

SELECT * 
FROM TABLEB b 
WHERE exists (SELECT 1 FROM TABLEA a where a.caller_id = b.caller_id); 

而且,可以肯定有一個索引上TABLEA(caller_id)

create index tablea_caller_id on tablea(caller_id); 

的MySQL的某些版本做的不好使用子查詢優化inexists條款解決了這個問題。

+0

添加索引似乎加快了查詢! –

0

取而代之的子查詢使用加入校驗爲指數caller_id

SELECT DISTINCT b.* FROM TABLEB b 
INNER JOIN TABLEA a 
ON (a.caller_id =b.caller_id) 

又讀SQL Joins Vs SQL Subqueries (Performance)

+0

嗨。感謝那!雖然,在查找記錄方面同樣緩慢 –

+0

@sipher_z發佈解釋查詢的結果運行'EXPLAIN SELECT ....' –

+0

@M Khalid Junaid我已更新我的問題 –