2009-10-17 33 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