有没有一种方法可以优化我的NOT IN查询以加快速度?

时间:2019-01-16 19:39:23

标签: mysql

我有一个查询,正在使用该查询从表中排除特定的字段值。我的表非常大,大约有2700万条记录,我目前的查询大约需要10到15分钟才能完成,因此不胜感激。

我在C1,C2,C3和C4上有一个索引,该索引试图扫描整个表。

删除NOT IN并仅链接“ AND C3 <>'Exclude 1'”会使用C1,C2和C4上的索引,我不完全知道为什么。

我应该放下NOT IN还是缺少什​​么?

查询:

SELECT
  COUNT(DISTINCT C1)
FROM
  TABLE
WHERE
  C2 >= CURRENT_DATE() - INTERVAL 120 DAY
  AND C3 NOT IN (
    'Exclude #1',
    'Exclude #2'
  )
  AND C4 = '0';

1 个答案:

答案 0 :(得分:0)

您可以尝试使用左联接并检查空值

SELECT COUNT(DISTINCT C1)
FROM  TABLE
LEFT JOIN (
  select 'Exclude #1' C3
  union 
  select 'Exclude #2'
) t ON t.C3 = TABLE.C3
WHERE t.c3 IS NULL
AND TABLE.C4 = '0';