2013-04-23 74 views
2

我們正在試用SQL Azure作爲Microsoft Access的後端。然而,我們在運行代碼中的簡單查詢或作爲查詢時遇到巨大的性能問題。當從本地SQL Management Studio查詢窗口直接針對SQL Azure數據庫運行相同的查詢時,它會正常執行。Microsoft Access和SQL Azure性能問題

注意:相同的查詢對本地SQL數據庫執行正常。

  • MSACCESS 2013
  • ODBC SQL本機11.0
  • DAO
  • 錶鏈接(不是Web應用程序)

任何機構有任何意見或性能問題。

+0

我還沒有跟上了幾年的訪問,而不能以2013說話,但在過去的訪問會帶來多大的數據通過線路和做大量的處理,包括的連接和WHERE子句過濾,在客戶端上。對服務器引擎使用Access的唯一真正的帶寬有效的方法是發出傳遞查詢。 – Tim 2013-04-23 02:24:35

回答

0

我使用訪問作爲紅磚數據倉庫的前端。我們的情況可能有些相似之處。我的觀察是,如果紅磚表具有多列主鍵,則查詢需要很長時間。事實上,我甚至能夠看到會發生什麼。

我看到的就像這樣。讓我們說我的紅磚表,我們稱之爲MyTable,有一個5列主鍵。其中之一被稱爲TheDate。我建立訪問查詢,基本上類似於此:

select somefields 
from MyTable 
where field1 = [prompt for value] 
and TheDate > 7 days ago, whatever that syntax is in access. 

如果我認爲導致返回任何記錄的值,它的瞬間。但是,即使只返回一條記錄,我也會看到這種以紅磚運行的sql。

select somefields 
from MyTable 
where (field1 = something 
and TheDate = something 
and field 3 = something 
and field4 = something) 
or (same sort of thing for a different date) 
and so on for all 7 days in the date range. 

我不特別在意,因爲我是用戶,我認爲結果值得等待。事實上,有時我在等待時看着StackOverflow。

另一方面,傳遞查詢就像直接查詢數據庫一樣。此外,使用單個密鑰主鍵對錶進行查詢很快。

這可能是發生在你身上的事情。或者它可能是別的。

+0

謝謝你的回覆。我的查詢是從一個表到另一個表的簡單附加。我相信我需要使用傳遞查詢。 – pacster 2013-04-26 04:43:54

0

如果我理解正確,您是從Azure上的遠程SQL Server實例鏈接表並在MS Access前端運行您的查詢?

如果是這樣的話,有很多的東西可以影響性能:

  • 訪問嘗試運行服務器儘可能在查詢,但如果你正在寫你的查詢並不總是如此需要Access從服務器上拉出原始表數據以在本地執行查詢本身。
    例如,如果在查詢中使用UDF(VBA中的用戶定義函數),或者如果您使用的功能只有Access,而不是SQL Server,則會發生這種情況。

  • 在您的查詢中,如果將本地表與遠程表混合在一起,請注意傳輸大量數據,如果查詢無法通過MSAccess優化,則可能會傳輸整個表。

  • 如果您在SQL Server中的每個表上都沒有ROWVERSION字段,MSAccess將需要讀取比需要確定特定行是否已更改(如果需要讀取所有的領域比較他們的緩存)。

  • 如果你的索引不適合於您運行的查詢的類型,你也可以最終了更大量的數據被拉到比必要。

您可以嘗試減輕這些問題

  • 確保您的查詢不拉更多的數據比你真正需要的。
    使用分析器工具SQL Server來找出正在執行什麼,有多少是通過訪問請求的數據。

  • 使用傳遞查詢。他們將完全在服務器上運行。

  • 定義SQL Server上的意見,將返回你所需要的數據,然後鏈接這些意見,在您的前端表。

  • 定義的存儲過程,可以計算並返回你需要的數據。

  • 避免將遠程數據綁定到包含太多控件的表單。

參考

+0

感謝您的回覆,我會檢查。 – pacster 2013-04-26 04:42:47