FIX: 有些查詢具有左外部聯結和安裝 SQL Server 2000 SP3 張貼 Hotfix 之後,執行速度慢的 IS NULL 篩選器

文章翻譯 文章翻譯
文章編號: 830887 - 檢視此文章適用的產品。
Bug #: SHILOH_BUGS (470434)
全部展開 | 全部摺疊

在此頁中

徵狀

查詢可能對 Microsoft SQL Server 2000 張貼 SP3 Hotfix 組建 8.00.0776 執行速度變慢或稍後相較於查詢對 SQL Server 2000 該執行 Hotfix 組建 8.00.0776 之前,如果下列情況成立:
  • 查詢涉及兩個資料表的左外部聯結。在下列範例資料表 1 是左邊的資料表而表格 2 右邊的資料表。
  • IS NULL 的篩選條件存在於右邊的資料表 (表格 2) 的資料行上。
  • 聯結的資料行有不同的資料型別。一個資料行型別 varchar/字元,其他資料行是型別 nvarchar/nchar
  • 非常少的查詢結果資料列滿足外部聯結的 ON 條件。
比方說包含下列的聯結和篩選條件的查詢可能會執行速度變慢:
t1 left outer join t2 on t1.c1 = t2.c1 where t2.c1 is null --t1.c1 is of type nvarchar and t2.c1 is of type varchar

發生的原因

之所以發生這個問題,是因為 SQL Server 最佳化器 underestimates 聯結後滿足 IS NULL 的篩選條件的資料列數目。

其他可行方案

若要解決這個問題,請確定聯結資料行都屬於相同的資料型別。

解決方案

服務套件資訊

如果要解決這個問題,取得最新的 Service Pack,Microsoft SQL Server 2000。如需詳細資訊按一下 [下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項]:
290211如何取得最新的 SQL Server 2000 Service Pack

Hotfix 資訊

此 Hotfix 的英文版具有檔案屬性 (或更新) 中如下表所列。這些檔案的日期和時間為 Coordinated Universal Time (UTC)。當您檢視檔案資訊時,會將它轉換為當地時間。若要到 UTC 與當地時間差異使用 [中日期] 和 [時間] 工具,在 [控制台] 中的 [時區] 索引標籤]。
   Date         Time   Version            Size    File name
   --------------------------------------------------------------------
   31-May-2003  16:45  2000.80.818.0      78,400  Console.exe      
   28-Oct-2003  02:21  2000.80.873.0     315,968  Custtask.dll     
   02-Oct-2003  18:59  2000.80.867.0      33,340  Dbmslpcn.dll     
   25-Apr-2003  00:12                    786,432  Distmdl.ldf
   25-Apr-2003  00:12                  2,359,296  Distmdl.mdf
   29-Jan-2003  23:55                        180  Drop_repl_hotfix.sql
   12-Sep-2003  01:26  2000.80.859.0   1,905,216  Dtspkg.dll       
   26-Aug-2003  18:16  2000.80.854.0     528,960  Dtspump.dll      
   23-Jun-2003  20:40  2000.80.837.0   1,557,052  Dtsui.dll        
   23-Jun-2003  20:40  2000.80.837.0     639,552  Dtswiz.dll       
   24-Apr-2003  00:51                    747,927  Instdist.sql
   02-May-2003  23:56                      1,581  Inst_repl_hotfix.sql
   08-Feb-2003  04:40  2000.80.765.0      90,692  Msgprox.dll      
   01-Apr-2003  00:07                      1,873  Odsole.sql
   04-Apr-2003  23:46  2000.80.800.0      62,024  Odsole70.dll     
   07-May-2003  18:41  2000.80.819.0      25,144  Opends60.dll     
   02-Apr-2003  19:48  2000.80.796.0      57,904  Osql.exe         
   02-Apr-2003  21:15  2000.80.797.0     279,104  Pfutil80.dll     
   04-Aug-2003  16:17                    550,780  Procsyst.sql
   11-Sep-2003  22:37                     12,305  Qfe469315.sql
   22-May-2003  20:57                     19,195  Qfe469571.sql
   05-Sep-2003  23:36                  1,090,932  Replmerg.sql
   06-Sep-2003  05:18  2000.80.858.0     221,768  Replprov.dll     
   06-Sep-2003  05:18  2000.80.858.0     307,784  Replrec.dll      
   05-Sep-2003  22:00                  1,087,150  Replsys.sql
   13-Aug-2003  14:28                    986,603  Repltran.sql
   21-Oct-2003  22:08  2000.80.871.0      57,916  Semnt.dll        
   29-Jul-2003  18:13  2000.80.819.0     492,096  Semobj.dll       
   31-May-2003  16:27  2000.80.818.0     172,032  Semobj.rll
   05-Aug-2003  19:06                    127,884  Sp3_serv_uni.sql
   31-May-2003  23:01  2000.80.818.0   4,215,360  Sqldmo.dll       
   07-Apr-2003  15:44                     25,172  Sqldumper.exe    
   19-Mar-2003  16:20  2000.80.789.0      28,672  Sqlevn70.rll
   27-Sep-2003  02:42  2000.80.865.0     180,792  Sqlmap70.dll     
   03-Sep-2003  00:56  2000.80.857.0     188,992  Sqlmmc.dll       
   02-Sep-2003  21:03  2000.80.857.0     479,232  Sqlmmc.rll
   21-Oct-2003  22:08  2000.80.871.0     401,984  Sqlqry.dll       
   08-Feb-2003  04:40  2000.80.765.0      57,920  Sqlrepss.dll     
   28-Oct-2003  02:21  2000.80.873.0   7,606,353  Sqlservr.exe     
   25-Jul-2003  19:44  2000.80.845.0     590,396  Sqlsort.dll      
   08-Feb-2003  04:40  2000.80.765.0      45,644  Sqlvdi.dll       
   02-Oct-2003  18:59  2000.80.867.0      33,340  Ssmslpcn.dll     
   31-May-2003  23:01  2000.80.818.0      82,492  Ssnetlib.dll     
   31-May-2003  23:01  2000.80.818.0      25,148  Ssnmpn70.dll     
   28-Oct-2003  02:21  2000.80.873.0     123,456  Stardds.dll      
   31-May-2003  23:01  2000.80.818.0     158,240  Svrnetcn.dll     
   31-May-2003  16:59  2000.80.818.0      76,416  Svrnetcn.exe     
   30-Apr-2003  21:52  2000.80.816.0      45,132  Ums.dll          
   01-Jul-2003  22:19  2000.80.834.0      98,816  Xpweb70.dll      

附註由於檔案相依性最新版 Hotfix 或包含這些檔案的功能也可能包含其他檔案。

狀況說明

Microsoft 已確認這是本文 < 適用於 > 一節中所列的 Microsoft 產品中的問題。

這個問題,首先已經在 Microsoft SQL Server 2000 服務套件 4 中獲得修正。

其他相關資訊

本文中安裝所述的 Hotfix 之後,您必須確定啟動 SQL Server 時,亮 9209 該追蹤旗標。此修正,才會生效,您必須有追蹤旗標 9209 啟動 SQL Server 時開啟]。如果要執行這項操作,請依照下列步驟執行:
  1. 啟動 SQL Server 企業管理員。
  2. SQL Server 執行個體上按一下滑鼠右鍵,然後按一下 [內容]。
  3. 按一下 [一般] 索引標籤,然後按一下 [啟動參數
  4. 在 [啟動參數] 對話方塊輸入 -T9209參數] 方塊按一下 [新增],],然後再按一下 [確定]
  5. SQL Server 屬性] 對話方塊中,按一下 [確定]
  6. 重新啟動 SQL Server。

資料型別 (在此情況下,為 nvarchar/nchar 資料行比較 varchar/char 資料行時) 的轉換在查詢中的一個資料行可能必須不良的影響,對查詢的效能和它是個不錯的主意,若要避免這樣做,如果可以的話。如果您使用 [資料型別轉換 SQL Server 可能無法精確地產生基數估計。SQL Server 可能也限制從使用適當的索引。取得更多資訊有關資料型別轉換按一下 [下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項]:
271566PRB: SQL Server 比較資料行和使用不同資料型別的常數之間

屬性

文章編號: 830887 - 上次校閱: 2007年11月2日 - 版次: 5.3
這篇文章中的資訊適用於:
  • Microsoft SQL Server 2000 Developer Edition
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 2000 Enterprise Edition
  • Microsoft SQL Server 2000 Personal Edition
  • Microsoft SQL Server 2000 Workgroup Edition
  • Microsoft SQL Server 2000 Desktop Engine (Windows)
  • Microsoft SQL Server 2000 Enterprise Edition 64-bit
關鍵字:?
kbmt kbhotfixserver kbqfe kbqfe kbsqlserv2000presp4fix kbfix kbbug KB830887 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:830887
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