axe*_*axe 6 sql sqlite performance
我有两张桌子 - Keys和KeysTemp.
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)
我在表SourceId和Hash字段上都有索引:
CREATE INDEX [IdxKeysTempSourceIdHash] ON [KeysTemp]
(
[SourceId],
[Hash]
);
Run Code Online (Sandbox Code Playgroud)
Keys表的索引相同,但查询仍然很慢.临时表中有5行,主表中有大约60000行.通过散列查询大约需要27毫秒,但查询这5行大约需要3秒.
我也试过分裂指数,即用于创建不同的索引SourceId和Hash,但它的工作方式相同.OUTER JOIN在这里工作得更厉害.如何解决这个问题?
更新
如果我WHERE [SourceId] = 10从查询中删除它在30ms内完成,那很好,但我需要这个条件:)
谢谢
也许
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吗?我不知道它是否以不同的方式工作......