我有一个查询,用于从我的一个表中排除特定的字段值。我的表非常大~2700万条记录,我当前的查询大约需要10-15分钟才能完成,因此任何速度都将不胜感激。
我在 C1、C2、C3 和 C4 上有一个索引,它正在尝试扫描整个表。
删除 NOT IN 并仅链接"AND C3 <>'排除 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';
您可以尝试使用左连接并检查空值
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';