我有一个硬编码的值列表,例如: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 的索引。似乎问题是“where m.ID in (1,5,7,8)”。
有没有更快的方法通过硬编码的值列表过滤掉行?
最佳答案
尝试将您的列表作为 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
关于mysql - 在 MySQL 性能中通过硬编码列表过滤掉行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1583474/