2009-10-17 52 views
1

我有一個硬編碼的值列表,如:1,5,7,8等。在MySQL性能中通過硬編碼列表篩選出行

我必須過濾掉表,在列表中有ID上面行,所以我做這樣的事情:

Select 
* 
from myTable m 
    left join othertable t 
    on t.REF_ID = m.ID 
where m.ID not in (1,5,7,8...) 

但是,當我有更多的值(如1000)和更多的行(100) othertable和myTable這個查詢開始變慢。我有一個關於REF_ID和ID的索引。看來,部分「,其中m.ID在(-1,5,7,8-)的問題。

是否有更快的值的硬編碼列表過濾掉行呢?

回答

1

嘗試把你的清單在臨時表中作爲temptable.ID並做

SELECT * 
FROM myTable m 
LEFT JOIN othertable t ON t.REF_ID = m.ID 
LEFT JOIN temptable ON m.ID = temptable.ID 
WHERE temptable.ID IS NULL