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

重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。

按一下這裡查看此文章的英文版本: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 陳述式中。
JOLT

警告:本文為自動翻譯

內容

文章識別碼:311159 - 最後檢閱時間:01/11/2015 04:27:10 - 修訂: 1.4

Microsoft OLE DB Provider for Jet 4.0

  • kbnosurvey kbarchive kbmt kbhotfixserver kbqfe kbbug kbfix kbqfe KB311159 KbMtzh
意見反應