mysql - 在 MySQL 性能中通过硬编码列表过滤掉行

标签 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 的索引。似乎问题是“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/

相关文章:

mysql - 将数据从一个表复制到另一个表(历史记录),除了一个非身份列

mysql - 如何将 varchar 转换/转换为日期?

iphone - 在 Xcode/Iphone 中测量 FPS/性能

php - 仅在 WordPress 首页/主页上禁用特定插件

mysql - 优化大型 MySQL 表中的索引

java - 不会在我的 java servlet 中显示我的数据库信息

php - 用于单个列表中大量行的良好 SQL 引擎

jquery 性能 td 替换

jquery - jquery选择器或变量之间有性能差异吗

algorithm - 有效地搜索各行中的数字对