2009-06-26 22 views
1

如果我有一個MS Access數據庫與來自兩個不同的數據庫服務器(從SQL Server數據庫中的一個表和一個Oracle數據庫中的一個表)連接表,並且我編寫一個查詢連接這兩個表,Access(或噴氣引擎,我猜?)處理這個查詢?它會在每個表上首先發出一些SELECT來獲取我正在加入的字段,找出哪些行匹配,然後爲這些行發出更多的SELECT?從不同服務器中的鏈接表加入時,MS Access的性能如何?

+1

在本地表和鏈接表之間的許多場合完成了這個操作後,這幾乎就是它的功能。 – YogoZuno 2009-06-26 04:13:01

回答

2

關鍵的一點理解是這樣的:

你是在問一個問題,它發送其請求到兩個服務器數據庫之前訪問/噴氣可以優化?如果你加入了這兩個表的全部,Jet將不得不請求這兩個表,這將是醜陋的。

另一方面,如果您可以提供限制連接的一個或兩個方面的標準,則Access/Jet可以更高效並請求經過篩選的結果集而不是整個表。

2

這將是我的猜測。它有助於聯接兩側都有索引,但由於這兩個服務器都無法完全控制查詢,所以不可能進行進一步的查詢優化。

1

我沒有從兩個不同的數據系統連接表的實際經驗。但是,根據需求等等,您可能會發現運行SELECT查詢時只需使用Access表中所需的記錄和字段並在Access中執行最終連接和查詢就可以更快。

3

是的,你可以有一些嚴重的性能問題。多年來我一直這樣做。 Oracle,Sql和DB2 - 呃。有時候我不得不在早上5點設置定時器,所以當我在7點進入時已經完成了。

如果您的數據集足夠重要,在本地構建表然後鏈接數據通常會更快。對於遠程數據集,也要查看passthroughs。

例如,假設您要從Oracle數據庫中提取所有昨天的客戶,並從SQL數據庫中購買所有客戶。假設您每天平均有100個客戶,但是列表的數量是30,000,並且可以說您的產品有500,000個清單。您可以查詢oracle數據庫中的100個客戶列表,然後將其寫入IN語句中,並將其傳遞給sql db。你幾乎可以立即得到你的數據。

或者,如果您的記錄集很大,請建立兩個ID的本地表,然後在本地比較它們,然後只需拉取必要的匹配項。

它很醜,但你可以從字面上節省自己的時間。

相關問題