FIX: 效率不佳的 LIKE 子句之後加上 Jet OLEDB 提供者的使用

文章翻譯 文章翻譯
文章編號: 311159 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

在此頁中

徵狀

當您執行 SQL 查詢,使用 Microsoft Jet OLEDB 提供者 4.0 您將 LIKE 子句套用到連結的 SQL Server 資料表 LIKE 子句是不正確轉送由 Microsoft Jet 查詢處理器到 SQL Server。 這會導致效率較低的整體查詢因為所有資料列第一次擷取從 SQL Server 在本機 Jet。

附註的所有資料列將從本機擷取由 Jet 之後 LIKE 子句套用在內部至最後的結果傳回給用戶端傳送結果,所以最終結果是相同的資料列集之前。

解決方案

如果要解決這個問題,安裝最新的 Microsoft Jet 4.0 Service Pack。如需詳細資訊按一下 [下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項]:
239114如何: 取得最新的 Service Pack,為 Microsoft Jet 4.0 資料庫引擎

狀況說明

Microsoft 已確認這是在本文開頭所列之 Microsoft 產品中的問題。這個問題已修正在 Jet 4.0 服務封包 6 (SP6)。

其他相關資訊

重製行為的步驟

  1. 建立新的 Microsoft Access 資料庫,名為 C:\DB1.MDB 」。
  2. 在 Access 中開啟 C:\DB1.MDB 並建立連結的資料表,以位於 pubs 資料庫,SQL Server 伺服器上的 [authors] 資料表。保留 dbo_authors 的預設連結的資料表的名稱。
  3. 執行下列查詢使用 Microsoft Jet OLEDB 提供者 4.0 對 Access 資料庫 C:\DB1.MDB
    SELECT * from dbo_authors WHERE state LIKE 'M%'
    					
如果您監視使用 SQL Server 分析工具公用程式的後端 SQL Server 伺服器,您將會看到下列 SQL 陳述式會傳送到 SQL Server 指出 Microsoft Jet 查詢最佳化器會套用 LIKE 準則之後從 [authors] 資料表擷取的所有資料列。請注意移除所有非要徑的 SQL 陳述式,並且已加入註解描述各種 Microsoft Jet 所傳送的 SQL 陳述式。
-- This is sent first by Jet to fetch all key values.  
-- Note that WHERE state LIKE 'M%' is not applied here.

SELECT au_id, state FROM authors 

-- This retrieves a single row using the first key value retrieved by the
-- above SQL statement. Jet will apply the LIKE clause internally
-- before retrieving the first row.

SELECT au_id,au_lname,au_fname,phone,address,city,state,zip,contract  
FROM dbo.authors WHERE au_id = @P1 
				
如果您在執行相同的 SQL 查詢使用 Microsoft Access ODBC 驅動程式 LIKE 子句會適當地轉送到 SQL Server 產生更有效率的整體查詢在第一個 SQL 陳述式中。

屬性

文章編號: 311159 - 上次校閱: 2005年10月12日 - 版次: 1.4
這篇文章中的資訊適用於:
  • Microsoft OLE DB Provider for Jet 4.0
關鍵字:?
kbmt kbhotfixserver kbqfe kbbug kbfix kbqfe KB311159 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:311159
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。
依現狀不再更新的知識庫內容免責聲明
本文旨在說明 Microsoft 不再提供支援的產品。因此,本文係依「現狀」提供,不會再更新。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com