SQLite NOT IN查询很慢

axe*_*axe 6 sql sqlite performance

我有两张桌子 - KeysKeysTemp. KeysTemp包含应Keys使用该Hash字段合并的临时数据.这是查询:

SELECT
    r.[Id]
FROM
    [KeysTemp] AS k
WHERE
    r.[Hash] NOT IN (SELECT [Hash] FROM [Keys] WHERE [SourceId] = 10)
Run Code Online (Sandbox Code Playgroud)

我在表SourceIdHash字段上都有索引:

CREATE INDEX [IdxKeysTempSourceIdHash] ON [KeysTemp]
(
    [SourceId],
    [Hash]
);
Run Code Online (Sandbox Code Playgroud)

Keys表的索引相同,但查询仍然很慢.临时表中有5行,主表中有大约60000行.通过散列查询大约需要27毫秒,但查询这5行大约需要3秒.

我也试过分裂指数,即用于创建不同的索引SourceIdHash,但它的工作方式相同.OUTER JOIN在这里工作得更厉害.如何解决这个问题?

更新 如果我WHERE [SourceId] = 10从查询中删除它在30ms内完成,那很好,但我需要这个条件:)

谢谢

Mic*_*ker 5

也许

select k.id
from keytemp as k left outer join keys as kk on (k.hash=kk.hash and kk.sourceid=10)
where kk.hash is null;
Run Code Online (Sandbox Code Playgroud)

?假设,r就是这样k.还有你试过not exists吗?我不知道它是否以不同的方式工作......