2016-05-01 98 views
2

我一直在努力將Access數據庫轉換爲MS SQL。對於我的初始測試,我使用SQL Server Express 2014將後端數據導入到我的系統中。到目前爲止,除了一個查詢外,我已經能夠使用我的Access前端工作。使用Access前端與SQL後端查詢速度

設置有問題的表上的主鍵已經幫助了一些但不完全。當我在Access中運行查詢時,需要大約10秒的時間才能運行,但是當我從第二臺計算機運行它時,運行時間需要30秒。但是,如果我直接運行查詢Server Management Studio,它會在一秒鐘內運行。

我不確定是否因爲我的筆記本電腦正在運行SQL,因爲它是SQL Server Express或兩者的組合,導致速度放慢。我希望有人能爲我提供更多信息。

下面是該查詢的副本:

SELECT tbl_defects.*, 
     tbl_parts.part_type, 
     tbl_parts.number, 
     tbl_parts.mold, 
     tbl_parts.date_created, 
     tbl_parts.blade, 
     tbl_parts.product, 
     tbl_defects.defects_id 
FROM tbl_parts 
     RIGHT JOIN (tbl_dispositions 
        RIGHT JOIN tbl_defects 
          ON tbl_dispositions.dispositions_id = 
           tbl_defects.disposition) 
       ON tbl_parts.parts_id = tbl_defects.part 
ORDER BY tbl_defects.defects_id DESC; 

在tbl_Defects主鍵是Defects_ID並且它被設置爲索引。在tbl_disposition上,主鍵是Disposition_ID,它被設置爲索引。第三個表tbl_parts的主鍵是Parts_ID,它也被設置爲索引。

如果我將任何右連接切換爲內連接,查詢將正常運行,但會丟失大約2000條記錄。

回答

2

這也是我的經驗,一些具有多個LEFT(或RIGHT)JOIN的查詢在鏈接表上的Access中運行時表現不佳。

如果可能的話,我建議爲此創建一個傳遞查詢(如果您不需要編輯結果集)。這將直接在服務器上運行,就像在SSMS中一樣。

或者你可以在SQL Server上創建一個視圖並鏈接它。

+0

使傳遞查詢明確幫助速度,但最終導致其他問題。我有一種形式,當它打開它不想顯示查詢。在它做的表單中做了一些修改之後,即使所有的控制源都是正確的,並且通過VBA更新的字段也有同樣的問題,但其他字段並未更新。我不確定是什麼原因造成的。如果你喜歡,我可以提供VBA和其他SQL查詢。但最初的速度問題已經解決了,所以我想爲此表示感謝。 – vxd128

+0

@ vxd128:這可能最好在新問題中提出。傳遞查詢的行爲應該像快照 - 它通常顯示爲與Access查詢類似,但不可編輯。 – Andre

0

您可以嘗試使用更常規的left join方法運行查詢嗎?

FROM tbl_Defects LEFT JOIN 
    tbl_Dispositions 
    ON tbl_Dispositions.Dispositions_ID = tbl_Defects.Disposition LEFT JOIN 
    tbl_Parts 
    ON tbl_Parts.Parts_ID = tbl_Defects.Part 

如果您需要括號:

FROM (tbl_Defects LEFT JOIN 
     tbl_Dispositions 
     ON tbl_Dispositions.Dispositions_ID = tbl_Defects.Disposition 
    ) LEFT JOIN 
    tbl_Parts 
    ON tbl_Parts.Parts_ID = tbl_Defects.Part 

也許東西是越來越在執行計劃中,由於加入亂碼。 RIGHT JOIN可能會非常棘手,因爲FROM子句的解析從左到右。但是,我很確定這將返回相同的結果集。