作者热门文章
- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我有两个表 - Keys
和 KeysTemp
。KeysTemp
包含应使用 Hash
字段与 Keys
合并的临时数据。这是查询:
SELECT
r.[Id]
FROM
[KeysTemp] AS k
WHERE
r.[Hash] NOT IN (SELECT [Hash] FROM [Keys] WHERE [SourceId] = 10)
我在两个表上都有 SourceId
和 Hash
字段的索引:
CREATE INDEX [IdxKeysTempSourceIdHash] ON [KeysTemp]
(
[SourceId],
[Hash]
);
Keys
表的索引相同,但查询仍然很慢。临时表中有 5 行,主表中有大约 60000 行。通过散列查询大约需要 27 毫秒,但是查询这 5 行大约需要 3 秒。
我也尝试过拆分索引,即为 SourceId
和 Hash
创建不同的索引,但它的工作方式相同。 OUTER JOIN
在这里的效果更差。如何解决这个问题?
更新如果我从它在 30 毫秒内完成的查询中删除 WHERE [SourceId] = 10
,那很好,但我需要这个条件:)
谢谢
最佳答案
也许
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;
?假设 r
是 k
。您是否也尝试过 not exists
?我不知道它是否以不同的方式工作......
关于SQLite NOT IN 查询很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12749930/
我是一名优秀的程序员,十分优秀!