我有兩個表: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 –