我有两个表:Documents
和DocumentAttributes
。带两个不在的SQL语句
Document
有关列DocID
,DelFlag
DocumentAttributes
:DocID
,aID
,aValue
现在我希望所有DocIDs和A-值有以下限制:
SELECT
[o1].[docid]
, [o1].[aValue]
FROM [DocumentAttributes] [o1]
WHERE [o1].[aID] = 9
AND [o1].[DocID] >= 2356
AND [o1].[DocID] < 90000000
AND [o1].[DocID] NOT IN
(
SELECT
[o].[DocID]
FROM [DocumentAttributes] [o]
WHERE [o].[aID] = 2
)
AND [o1].[DocID] IN
(
SELECT
[d].[DocID]
FROM [DOCUMENTS] [d]
WHERE [d].[DELFLAG] != 2
);
所以我想所有的文件h ave否AttributeID = 2且未标记为已删除的属性。
上面的SQL语句有效,但是由于我有大约1kk的文档,每个文档至少有10个属性,所以速度太慢。
3选择自己的成本不到1秒,所以“不在”是我猜的问题。
有没有人有一个想法如何使它更快?
预先感谢来自
有几种技术,其中一些是RDBMS特有的,另一些则不是。有些想到的是“minus”或“except”关键字,“不存在”和“左连接”。 –
标记您正在使用的dbms。 – jarlh
它是一个oracle DB –