我有一个硬编码的值列表,如: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是问题所在的部分。
是否有更快的方式按硬编码值列表过滤掉行?
答案 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