在MySQL性能中按硬编码列表过滤掉行

时间:2009-10-17 23:14:42

标签: mysql performance optimization query-optimization

我有一个硬编码的值列表,如:1,5,7,8等等。

我必须从表格中筛选出上面列出ID的行,所以我做了类似的事情:

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

但是当我在othertable和myTable中有更多值(如1000)和更多行(100)时,此查询开始变慢。我有一个关于REF_ID和ID的索引。似乎“(1,5,7,8)中的m.ID是问题所在的部分。

是否有更快的方式按硬编码值列表过滤掉行?

1 个答案:

答案 0 :(得分: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