KB2451540 - 2451540 - 修正:在 SQL Server 2005、SQL Server 2008 和 SQL Server 2008 R2 中執行的查詢在同一欄上包含多個自聯結作業時,可能會發生效能不佳的情況

Applies To
Microsoft SQL Server 2005 Workgroup Edition Microsoft SQL Server 2005 Evaluation Edition Microsoft SQL Server 2005 Standard Edition Microsoft SQL Server 2005 Express Edition Microsoft SQL Server 2005 Enterprise X64 Edition Microsoft SQL Server 2005 Developer Edition SQL Server 2008 Developer SQL Server 2008 Enterprise SQL Server 2008 Express SQL Server 2008 Standard SQL Server 2008 Workgroup SQL Server 2008 R2 Developer SQL Server 2008 R2 Express SQL Server 2008 R2 Standard SQL Server 2008 R2 Workgroup Microsoft SQL Server 2005 Service Pack 4 Microsoft SQL Server 2005 Service Pack 3

Microsoft 會發佈 Microsoft SQL Server 2005 或 Microsoft SQL Server 2008 或 Microsoft SQL Server 2008 R2 修正程式作為一個可下載的檔案。 由於修正程式是累積式,因此每個新版本都包含先前的 SQL Server 2005 或 Microsoft SQL Server 2008 或 Microsoft SQL Server 2008 R2 修正程式版本中包含的所有 Hotfix 和所有安全性修正程式。

症狀

請考量以下情況。 您在 Microsoft SQL Server 2005、Microsoft SQL Server 2008 或 Microsoft SQL Server 2008 R2 中有一個資料庫。 您執行的查詢包含資料庫中相同資料表的相同欄所操作的自聯結作業。 例如,當您嘗試建立使用資料庫中資料的 Cube 時,可能會對相同資料行執行包含多個自我聯結作業的查詢。 在此情況下,可能會出現效能不佳的情況,並且查詢可能需要很長的時間才能執行。

原因

發生此問題的原因是查詢中的基數估計不正確。 在考慮數個自我聯結作業之後,查詢最佳化工具可能會將另一個聯結運算子的列數估計為 1。 因此,查詢最佳化工具會選取效率低下的查詢計劃,且可能會發生效能不佳的情形。

解決方式

累積更新資訊

SQL Server 2008 Service Pack 2

此問題的修正程式最初已發行在 SQL Server 2008 Service Pack 2 的累積更新 3 中。 如需有關此累積更新套件的詳細資訊,請按一下下面的文章編號,檢視「Microsoft 知識庫」中的文章:

2498535 累積更新套件 3 for SQL Server 2008 Service Pack 2 注意:由於這些組建是累積的,因此每個新發行的修正程式都包含所有 Hotfix 和所有安全性修正程式,來自上一個 SQL Server 2008 修正程式版本。 Microsoft 建議您考慮套用包含此 Hotfix 的最新修正版本。 如需詳細資訊,請按一下下面的文章編號,檢視「Microsoft 知識庫」中的文章:

2402659 SQL Server 2008 Service Pack 2 發行之後所發行的 SQL Server 2008 組建Microsoft SQL Server會為特定 SQL Server Service Pack 建立 Hotfix。 您必須將 SQL Server 2008 Service Pack 2 Hotfix 套用至 SQL Server 2008 Service Pack 2 的安裝。 預設情況下,SQL Server Service Pack 中提供的任何 Hotfix 都會包含在下一個 SQL Server Service Pack 中。

SQL Server 2008 R2

此問題的修正程式最初在累積更新 6 中發行。 如需有關如何取得 SQL Server 2008 R2 的累積更新套件的詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:

2489376 SQL Server 2008 R2 的累積更新套件 6 注意:由於組建是累積的,因此每個新發行的修正程式都包含所有 Hotfix 和所有安全性修正程式,這些都包含在先前的 SQL Server 2008 R2 修正程式版本中。 建議您考慮套用包含此 Hotfix 的最新修正版本。 如需詳細資訊,請按一下下面的文章編號,檢視「Microsoft 知識庫」中的文章:

981356 在 SQL Server 2008 R2 發行之後所發行的 SQL Server 2008 R2 組建 (機器翻譯)

SQL Server 2008 Service Pack 1

此問題的修正程式最初在 SQL Server 2008 Service Pack 1 的累積更新 12 中發行。 如需有關此累積更新套件的詳細資訊,請按一下下面的文章編號,檢視「Microsoft 知識庫」中的文章:

2467236 SQL Server 2008 Service Pack 1 的累積更新套件 12 注意:由於這些組建是累積的,因此每個新發行的修正程式都包含所有 Hotfix 和所有安全性修正程式,這些修正程式都包含在上一個 SQL Server 2008 修正程式版本中。 Microsoft 建議您考慮套用包含此 Hotfix 的最新修正版本。 如需詳細資訊,請按一下下面的文章編號,檢視「Microsoft 知識庫」中的文章:

970365 發行 SQL Server 2008 Service Pack 1 之後所發行的 SQL Server 2008 組建Microsoft SQL Server會為特定 SQL Server Service Pack 建立 Hotfix。 您必須將 SQL Server 2008 Service Pack 1 Hotfix 套用至 SQL Server 2008 Service Pack 1 的安裝。 預設情況下,SQL Server Service Pack 中提供的任何 Hotfix 都會包含在下一個 SQL Server Service Pack 中。

安裝此累積更新套件之後,您必須啟用追蹤旗標 4199。 若要這麼做,您可以新增 -T4199 啟動參數,也可以針對個別工作階段使用 dbcc traceon (4199) 陳述式。

SQL Server 2005 Service Pack 3

                
SQL Server 2005 Service Pack 3 此問題的修正程式最初在 SQL Server 2005 Service Pack 3 的累積更新 13 中發行。 如需有關此累積更新套件的詳細資訊,請按一下下面的文章編號,檢視「Microsoft 知識庫」中的文章:

2438344 適用於 SQL Server 2005 Service Pack 3 的累積更新套件 13 注意:由於這些組建是累積的,因此每個新發行的修正程式都包含所有 Hotfix 和所有安全性修正程式,這些修正程式都包含在上一個 SQL Server 2005 修正程式版本中。 Microsoft 建議您考慮套用包含此 Hotfix 的最新修正版本。 如需詳細資訊,請按一下下面的文章編號,檢視「Microsoft 知識庫」中的文章:

960598 發行 SQL Server 2005 Service Pack 3 之後所發行的 SQL Server 2005 組建Microsoft會為特定 SQL Server Service Pack 建立 SQL Server 2005 Hotfix。 您必須將 SQL Server 2005 Service Pack 3 Hotfix 套用至 SQL Server 2005 Service Pack 3 的安裝。 預設情況下,SQL Server Service Pack 中提供的任何 Hotfix 都會包含在下一個 SQL Server Service Pack 中。

安裝此累積更新套件之後,您必須啟用追蹤旗標 4199。 若要這麼做,您可以新增 -T4199 啟動參數,也可以針對個別工作階段使用 dbcc traceon (4199) 陳述式。

SQL Server 2005 Service Pack 4

此問題的修正程式最初在 SQL Server 2005 Service Pack 4 的累積更新 2 中發行。 如需有關此累積更新套件的詳細資訊,請按一下下面的文章編號,檢視「Microsoft 知識庫」中的文章:

2489409 SQL Server 2005 Service Pack 4 累積更新套件 2 注意 由於組建是累積的,因此每個新發行的修正程式都包含所有 Hotfix 和所有隨附於先前 SQL Server 2005 修正程式版本的安全性修正程式。 Microsoft 建議您考慮套用包含此 Hotfix 的最新修正版本。 如需詳細資訊,請按一下下面的文章編號,檢視「Microsoft 知識庫」中的文章:

2485757 SQL Server 2005 Service Pack 4 發行之後所發行的 SQL Server 2005 組建Microsoft是為特定 SQL Server Service Pack 建立 SQL Server 2005 Hotfix。 您必須將 SQL Server 2005 Service Pack 4 Hotfix 套用至 SQL Server 2005 Service Pack 4 的安裝。 預設情況下,SQL Server Service Pack 中提供的任何 Hotfix 都會包含在下一個 SQL Server Service Pack 中。

狀態

Microsoft 已確認這是「適用對象」一節中列出的 Microsoft 產品中的問題。

參考資料

如需有關 SQL Server 累加式服務模型的詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:

935897 SQL Server 小組提供累加式服務模型,以提供回報問題的 Hotfix 如需有關 SQL Server 更新命名架構的詳細資訊,請按一下下面的文章編號,檢視 Microsoft知識庫中的文章:

822499 Microsoft SQL Server 軟體更新套件的新命名架構如需有關軟體更新術語的詳細資訊,請按一下下面的文章編號,檢視「Microsoft知識庫」中的文章:

824684 描述Microsoft軟體更新所使用的標準術語說明