我有一个查询,正在使用该查询从表中排除特定的字段值。我的表非常大,大约有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';
答案 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';