【问题标题】:Filter out rows by hardcoded list in MySQL performance在 MySQL 性能中通过硬编码列表过滤掉行
【发布时间】:2009-10-17 23:14:42
【问题描述】:

我有一个硬编码的值列表,例如: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 的索引。似乎“m.ID in (1,5,7,8) 中的部分是问题所在。

有没有更快的方法通过硬编码的值列表过滤掉行?

【问题讨论】:

    标签: mysql performance optimization query-optimization


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2018-12-26
      • 2018-01-16
      • 1970-01-01
      • 2018-11-15
      • 1970-01-01
      • 2011-03-21
      • 2021-12-21
      • 2018-10-12
      • 1970-01-01
      相关资源
      最近更新 更多