閱讀英文

共用方式為


如何在使用 ODBC 數據源時優化 Microsoft Access

進階:需要專家程式代碼撰寫、互操作性和多使用者技能。

本文僅適用於 Microsoft Access 資料庫 (.mdb 或 .accdb) 。

摘要

本文說明當您從 ODBC 數據來源存取數據時,改善效能的幾個秘訣。

其他相關資訊

使用下列秘訣來改善 ODBC 數據源的效能:

  • 限制您從伺服器要求的數據量。 請勿要求比您需要更多的數據。 使用查詢只選取您需要的欄位和數據列。

  • 只使用您需要的功能。 快照集的功能不如動態集,而且無法更新。 不過,快照集可能會更快,特別是對於沒有 Memo 或 OLE 物件欄位的小型記錄集。

  • 建立連結 (連結) 數據表以存取伺服器數據。 避免「直接」伺服器存取 (也就是,請勿開啟遠端資料庫,並針對它們) 執行查詢。 請改為建立附加數據表或建立傳遞查詢。

  • 明智地設計清單框和下拉式方塊。 在表單上,每個包含總計的清單框、下拉式方塊、子表單和控件都需要個別的查詢。 針對本機數據,效能可能已足夠。 不過,針對遠端數據,當您開啟窗體時可能會發生長時間延遲,因為每個查詢都必須傳送至伺服器,而且必須先傳回回應,才能開啟表單。

  • 避免使用大型下拉式方塊。 包含以本機數據表為基礎的數百個或甚至數千個選擇的下拉式方塊,可能會產生可接受的回應時間,特別是當您在本機數據表上定義適當的索引時。 不過,針對遠端數據表,這類下拉式方塊會產生緩慢的效能,因為它會在擷取數據以填滿清單時耗盡伺服器和網路資源。 當您使用遠端數據時,最好限制傳回至下拉式方塊的數據列數目。 您也可以將數據分成較小的下拉式方塊, (記住上述提示) 。

  • 請只在較小的記錄集上使用 Find 命令。 Microsoft Jet 資料庫引擎會將 Find 命令優化,以針對幾乎任何大小的本機記錄集及合理大小的遠端記錄集正常運作。 不過,當您的大型遠程記錄集 (數千筆記錄或多個) 時,您應該改為建立篩選或查詢,並小心使用伺服器可以處理的限制。

  • 請確定查詢已傳送至伺服器進行處理。 針對遠端數據的查詢效能最重要的因素是確保您的伺服器盡可能執行查詢。 Microsoft Jet 資料庫引擎會嘗試將整個查詢傳送至您的伺服器,但會在本機評估伺服器或特定伺服器通常不支援的任何查詢子句和表示式。 伺服器一般不支援的功能包括下列各項:

  • 無法以單一 SQL 語句表示的作業。 當您使用查詢做為另一個查詢的輸入,或查詢的FROM子句包含Totals查詢或DISTINCT查詢時,就會發生這種情況。 通常,您可以重新排列查詢,以計算所有其他作業之後的總計。

    • 屬於 MICROSOFT Jet 資料庫引擎特定 SQL 延伸模組的作業,例如交叉表查詢、TOP 查詢,以及具有多個群組和總計層級的報表。 請注意,簡單的交叉表查詢可以傳送至伺服器。
    • 包含 Microsoft Access 特定運算子或函式的表達式。 Microsoft Access 財務函數和統計匯總沒有伺服器對等專案。
    • 採用遠端數據行作為自變數的使用者定義 Visual Basic for Application 函式。 這些函式不存在於伺服器上,但必須處理遠端數據行數據。 不過,如果使用者定義函數傳回單一值,但未參考遠端數據行,則會在本機評估函式,並將其值傳送至伺服器進行處理。
    • 在運算子或 UNION 查詢輸出中混合文字和數值數據類型。 大部分的伺服器缺少 Microsoft Access 的數據類型寬度。 因此,請視需要使用明確轉換函式。
    • 本機數據表與遠端數據表之間的異質聯結,或不同 ODBC 數據源中的遠端數據表之間的異質聯結。 小型本機數據表與大型遠端數據表之間的聯結,其中聯結數據行已編製索引,可能會導致遠端索引聯結。 在遠端索引聯結中,會將本機數據表中每個數據列的一個查詢傳送至伺服器,而且只會傳回聯結數據列。
    • 無法遠端的表達式或無法從遠端傳送的表達式,因為您的伺服器無法評估它們。 不可遠端的輸出表達式 (SELECT 子句中的輸出表示式) 不會強制本機評估查詢,除非它們出現在 Totals 查詢、DISTINCT 查詢或 UNION 查詢中。 其他子句中的不可遠端表示式 (WHERE、ORDER BY、GROUP BY、HAVING 等) 強制至少在本機評估查詢的一部分。
  • 伺服器在某些支援的功能方面有所不同。 當您附加遠端數據表時,Microsoft Jet 資料庫引擎會查詢 ODBC 驅動程式的功能。 如果驅動程式和伺服器支援必要的功能,Microsoft Jet 資料庫引擎會將作業傳送至伺服器進行處理。 如果不是,Microsoft Jet 資料庫引擎會在本機執行作業。 不同支持的區域包括 (,但不限於下列) :

    • 外部聯結。 請注意,Microsoft Jet 資料庫引擎不會將多個外部聯結傳送至伺服器,雖然許多內部聯結可能伴隨單一外部聯接。
    • 數值、字串和日期/時間函式 -- 例如記錄 () 、Mid$ () 、DatePart () 等。
    • 轉換函式 -- 例如 CInt () 、CStr () 、CVDate () 等等。