長話短說:MS-訪問:SQL JOIN和INSERT INTO與WHERE慢
SELECT查詢與INNER JOIN兩個表的插入通過插入一個新表。儘管此查詢在20秒內完成,但在SELECT部分中添加WHERE條件會凍結查詢!
詳情:
我有
Table i : Tab_i
ID_i (Long, Indexed, Duplicates possible)
MyDate (Date)
Field_1 (...)
...
Field_N (...)
我創建了一個表Tab_MATCH存儲比較這兩個表
Table Tab_MATCH
ID_1 (Long, Indexed, Duplicates possible)
ID_2 (Long, Indexed, Duplicates possible)
當匹配ID的兩個表(I = 1,2)
匹配通過兩個表Tab_1和Tab_2的連接完成,將匹配的ID插入表Tab_MATCH
INSERT INTO
Tab_MATCH
SELECT
Tab_1.ID_1,
Tab_2.ID_2,
FROM
Tab_1
INNER JOIN
Tab_2
ON
(Tab_1.Field_1 = Tab_2.Field_1) AND
(...) AND
(Tab_1.Field_N = Tab_2.Field_N)
此過程在約20秒內運行正常。 然後我想在Tab_2的日期上添加一個約束,例如考慮到2014年3月(2014年3月1日)的1日前只有條目,所以我加了
INSERT INTO
Tab_MATCH
SELECT
Tab_1.ID_1,
Tab_2.ID_2,
FROM
Tab_1
INNER JOIN
Tab_2
ON
(Tab_1.Field_1 = Tab_2.Field_1) AND
(...) AND
(Tab_1.Field_N = Tab_2.Field_N)
WHERE
Tab_2.MyDate < #3/1/2014#
這個查詢現在一直運行。如果我只做了帶日期約束的選擇,它也在約20秒內完成,但插入類型凍結!
我在這裏錯過了什麼?是否有任何表格掃描涉及此過程或其他任何加入條目? (使用的MS Access 2016(32位))
MS-Access的misteries。很難調試這種事情,因爲Access沒有EXPLAIN PLAN機制。你有沒有試圖壓縮/修復你的數據庫? –
是的,它的痛苦...我已經壓縮/修復(幾次),並試圖直接在連接中添加WHERE子句'... INNER JOIN (SELECT * FROM Tab_2 WHERE Tab_2.MyDate <#3/1/2014#)...'但沒有改進... – HeXor
我只是試圖通過VBA循環插入SELECT查詢作爲DAO.Recordset(是的,我在這一點上已經...),也在這裏它只在計算條目數時凍結[Dim rs as DAO.Recordset; set rs = CurrentDb.OpenRecordset(「SELECT ...」); rs.MoveFirst; rs.MoveLast; Debug.Print rs.RecordCount; rs.Close' rs.MoveLast'命令再次凍結...刪除WHERE子句也可以正常工作... – HeXor