首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查询中没有SQLite的速度很慢

问查询中没有SQLite的速度很慢
EN

Stack Overflow用户
提问于 2012-10-05 16:00:14
回答 3查看 23.2K关注 0票数 7

我有两张桌子- Keys和KeysTemp。KeysTemp包含临时数据,这些数据应该使用Hash字段与Keys合并。以下是查询:

代码语言:javascript
复制
SELECT
    r.[Id]
FROM
    [KeysTemp] AS k
WHERE
    r.[Hash] NOT IN (SELECT [Hash] FROM [Keys] WHERE [SourceId] = 10)

对于SourceId和Hash字段,我在两个表上都有索引:

代码语言:javascript
复制
CREATE INDEX [IdxKeysTempSourceIdHash] ON [KeysTemp]
(
    [SourceId],
    [Hash]
);

Keys表的索引相同,但查询速度仍然很慢。临时表中有5行,主表中大约有60000行。哈希查询大约需要27毫秒,但是查询这5行需要大约3秒。

我还尝试了拆分索引,即为SourceId和Hash创建不同的索引,但它的工作方式相同。OUTER JOIN在这里工作得更糟。如何解决这个问题?

UPDATE如果我从它在30‘s内完成的查询中删除WHERE [SourceId] = 10,这很好,但是我需要这样的条件:)

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-10-05 16:05:51

也许吧

代码语言:javascript
复制
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吗?我不知道它是否以不同的方式工作,…

票数 5
EN

Stack Overflow用户

发布于 2012-10-05 16:02:10

如果只有几个新的密钥,您可以尝试如下:

代码语言:javascript
复制
SELECT
    r.[Id]
FROM
    [KeysTemp] AS k
WHERE
    r.[Id] NOT IN (SELECT kt.[Id] FROM [Keys] AS k1
                   INNER JOIN [KeysTemp] AS kt ON kt.Hash = k1.Hash
                   WHERE k1.[SourceId] = 10)

KeysTemp应该在Hash列上有一个索引,在SourceId列上有一个Keys。

票数 0
EN

Stack Overflow用户

发布于 2012-10-05 16:08:47

我会这样做:

代码语言:javascript
复制
SELECT
    r.[Id]
FROM 
    [KeysTemp] AS k
WHERE
    r.[Id] NOT IN (SELECT A.[Id] FROM [KeysTemp] AS A, [Keys] AS B WHERE B.[SourceId] = 10 AND A.[Hash] == B.[Hash])

列出KeysTemp (几个)中存在于密钥中的所有元素,然后取KeysTemp中的非这些元素

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12749930

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档