尋求加快此查詢的建議。 Access 2007. 內部查詢需要幾分鐘時間,完整查詢需要很長時間(40 - 80分鐘)。結果如預期。一切都被索引。SQL Query中的改進 - 複雜加入/ IN/Exists
SELECT qtdetails.F5, qtdetails.F16, ExpectedResult.DLID, ExpectedResult.NumRows
FROM qtdetails
INNER JOIN (INVDL
INNER JOIN ExpectedResult
ON INVDL.DLID = ExpectedResult.DLID)
ON (qtdetails.F1 = INVDL.RegionCode)
AND (qtdetails.RoundTotal = ExpectedResult.RoundTotal)
WHERE
(qtdetails.F5 IN (SELECT qtdetails.F5
FROM (ExpectedResult
INNER JOIN INVDL
ON ExpectedResult.DLID = INVDL.DLID)
INNER JOIN qtdetails
ON (INVDL.RegionCode = qtdetails.F1)
AND (ExpectedResult.RoundTotal = qtdetails.RoundTotal)
GROUP BY qtdetails.F5
HAVING (((COUNT(ExpectedResult.DLID)) < 2));
)
);
INVDL - 80000個記錄
ExpectedResult - 百個千萬記錄
qtDetails - 12000個記錄
內部查詢將導致大約5000 - 8000條記錄。 嘗試在表中保存內部查詢的結果。然後使用 改爲從qTempTable中選擇F5。但仍需要很長時間。
任何幫助將非常感激。
數據類型:
qtdetails.F5 = Number
qtdetails.F16 = Text
ExpectedResult.NumRows = Number
INVDL.DLID = Number
ExpectedResult.DLID = Number
INVDL.RegionCode = Text
qtdetails.F1 = Text
爲了得到這種性質的任何實際幫助,建議還要提供'EXPLAIN'計劃(這基本上是所有RDBMS如何決定如何查找東西的)。至少要知道你有什麼指數。 '很長'要多久?如果你的_expected result_是10mil行,它會**需要一段時間。 –
@ Clockwork-Muse我已經索引了連接中涉及的所有列。想知道如果轉換「IN」加入會有所幫助。是的「ExpectedResult」會很大,它的預期。使用Access - EXPLAIN可以在這裏使用? – arcotenterprises
你可以在這裏提供更多的信息嗎? 3個表格中每列的數據類型是什麼?他們如何映射到對方(1對1,1對多等)?樣本數據的一小部分也會很有用,以查看一切如何結合在一起。 – John