我們正在試用SQL Azure作爲Microsoft Access的後端。然而,我們在運行代碼中的簡單查詢或作爲查詢時遇到巨大的性能問題。當從本地SQL Management Studio查詢窗口直接針對SQL Azure數據庫運行相同的查詢時,它會正常執行。Microsoft Access和SQL Azure性能問題
注意:相同的查詢對本地SQL數據庫執行正常。
- MSACCESS 2013
- ODBC SQL本機11.0
- DAO
- 錶鏈接(不是Web應用程序)
任何機構有任何意見或性能問題。
我們正在試用SQL Azure作爲Microsoft Access的後端。然而,我們在運行代碼中的簡單查詢或作爲查詢時遇到巨大的性能問題。當從本地SQL Management Studio查詢窗口直接針對SQL Azure數據庫運行相同的查詢時,它會正常執行。Microsoft Access和SQL Azure性能問題
注意:相同的查詢對本地SQL數據庫執行正常。
任何機構有任何意見或性能問題。
我使用訪問作爲紅磚數據倉庫的前端。我們的情況可能有些相似之處。我的觀察是,如果紅磚表具有多列主鍵,則查詢需要很長時間。事實上,我甚至能夠看到會發生什麼。
我看到的就像這樣。讓我們說我的紅磚表,我們稱之爲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。
另一方面,傳遞查詢就像直接查詢數據庫一樣。此外,使用單個密鑰主鍵對錶進行查詢很快。
這可能是發生在你身上的事情。或者它可能是別的。
謝謝你的回覆。我的查詢是從一個表到另一個表的簡單附加。我相信我需要使用傳遞查詢。 – pacster 2013-04-26 04:43:54
如果我理解正確,您是從Azure上的遠程SQL Server實例鏈接表並在MS Access前端運行您的查詢?
如果是這樣的話,有很多的東西可以影響性能:
訪問嘗試運行服務器儘可能在查詢,但如果你正在寫你的查詢並不總是如此需要Access從服務器上拉出原始表數據以在本地執行查詢本身。
例如,如果在查詢中使用UDF(VBA中的用戶定義函數),或者如果您使用的功能只有Access,而不是SQL Server,則會發生這種情況。
在您的查詢中,如果將本地表與遠程表混合在一起,請注意傳輸大量數據,如果查詢無法通過MSAccess優化,則可能會傳輸整個表。
如果您在SQL Server中的每個表上都沒有ROWVERSION字段,MSAccess將需要讀取比需要確定特定行是否已更改(如果需要讀取所有的領域比較他們的緩存)。
如果你的索引不適合於您運行的查詢的類型,你也可以最終了更大量的數據被拉到比必要。
您可以嘗試減輕這些問題
確保您的查詢不拉更多的數據比你真正需要的。
使用分析器工具SQL Server來找出正在執行什麼,有多少是通過訪問請求的數據。
使用傳遞查詢。他們將完全在服務器上運行。
定義SQL Server上的意見,將返回你所需要的數據,然後鏈接這些意見,在您的前端表。
定義的存儲過程,可以計算並返回你需要的數據。
避免將遠程數據綁定到包含太多控件的表單。
參考
感謝您的回覆,我會檢查。 – pacster 2013-04-26 04:42:47
我還沒有跟上了幾年的訪問,而不能以2013說話,但在過去的訪問會帶來多大的數據通過線路和做大量的處理,包括的連接和WHERE子句過濾,在客戶端上。對服務器引擎使用Access的唯一真正的帶寬有效的方法是發出傳遞查詢。 – Tim 2013-04-23 02:24:35