Sign in with Microsoft
Sign in or create an account.
Hello,
Select a different account.
You have multiple accounts
Choose the account you want to sign in with.

Microsoft 發佈 Microsoft SQL Server 2008 R2 Service Pack 1 (SP1)或 Microsoft SQL Server 2012 (以一個可下載的檔案修正)。 因為修正程式是累加的,所以每個新發行版本本都包含舊版 SQL Server 2008 R2 Service Pack 1 (SP1)或 SQL Server 2012 更新版本中所包含的所有熱修復程式和安全性更新。

徵狀

請考慮下列情況。 您在 Microsoft SQL Server 2008 R2 或 Microsoft SQL Server 2012 中執行查詢,而查詢優化程式會產生包含 Top 運算子的執行方案。 在這種情況下,查詢可能需要花很長的時間才能執行。 例如,執行如下所示的查詢:

SELECT TableA.Col1 FROM TableA JOIN TableB ON TableA.Col1 = TableB.Col1 WHERE TableA.Col2 = N'A' AND TableB.Col3 IN (SELECT Col1 FROM TableC )此查詢涉及兩個連接。 在 TableB 和 TableC 之間有一個聯結。 (這是由於存在 IN 謂語而隱含)。 另一個連接是在資料表 A 和第一個連接的結果之間。 如果查詢找到至少一個滿足第一個連接謂詞的資料列,則 IN 謂詞會傳回 true。 因此,查詢優化程式會將 Top 運算子新增到查詢執行方案中。這類查詢可能只會傳回幾列。 不過,執行此查詢所需的時間可能會比預期更多。 在實際的查詢執行方案中,估計的列數與實際的資料列數很大。 這會影響查詢優化程式正確估計不同方案選項成本的能力。如果您明確使用 TOP 運算子,或者您使用下列其中一個運算子,也可能會發生這個問題:

  • 選項(快速 N)

  • 存在

解決方案

累積更新資訊

SQL Server 2008 R2 Service Pack 2

此問題的修正程式是在 SQL Server 2008 R2 Service Pack 2 的累積更新1中第一次發行。如需如何取得此累積更新套件的詳細資訊,請按一下下列文章編號,以查看 Microsoft 知識庫中的文章:

2720425 SQL Server 2008 R2 Service Pack 2 的累積式更新套件1注意: 因為組建是累加的,所以每個新的修正程式版本都包含先前 SQL Server 2008 R2 修正版本中所包含的所有修復程式及所有安全性修正程式。 我們建議您考慮套用包含此熱修復程式的最新修正版本。 如需詳細資訊,請按一下下面的文章編號,檢視「Microsoft 知識庫」中的文章:

2730301 在發行 SQL Server 2008 R2 Service Pack 2 之後發行的 SQL Server 2008 R2 組建

SQL Server 2008 R2 Service Pack 1

此問題的修正程式是在 SQL Server 2008 R2 Service Pack 1 的累積更新7中第一次發行。如需如何取得此累積更新套件的詳細資訊,請按一下下列文章編號,以查看 Microsoft 知識庫中的文章:

2703282 SQL Server 2008 R2 Service Pack 1 的累積更新套件7注意: 因為組建是累加的,所以每個新的修正程式版本都包含先前 SQL Server 2008 R2 修正版本中所包含的所有修復程式及所有安全性修正程式。 我們建議您考慮套用包含此熱修復程式的最新修正版本。 如需詳細資訊,請按一下下面的文章編號,檢視「Microsoft 知識庫」中的文章:

2567616 在發行 SQL Server 2008 R2 Service Pack 1 之後發行的 SQL Server 2008 R2 組建

SQL Server 2012

此問題的修正程式是在 SQL Server 2012 的累積更新2中第一次發行。如需此累積更新套件的詳細資訊,請按一下下列文章編號,以查看 Microsoft 知識庫中的文章:

2703275 SQL Server 2012 的累積更新套件2注意: 因為組建是累加的,所以每個新的修正程式版本都包含先前 SQL Server 2012 修正版本中所包含的所有修復程式及所有安全性修正程式。 Microsoft 建議您考慮套用包含此熱修復程式的最新修正版本。 如需詳細資訊,請按一下下面的文章編號,檢視「Microsoft 知識庫」中的文章:

2692828 在發行 SQL Server 2012 之後發行的 SQL Server 2012 組建 您必須將 SQL Server 2012 修補程式套用至 SQL Server 2012 的安裝。

SQL Server 2008 R2

此問題的修正程式是在累積更新13中第一次發行。如需有關如何取得 SQL Server 2008 R2 累積更新套件的詳細資訊,請按一下下列文章編號,以查看 Microsoft 知識庫中的文章:

2679366 SQL Server 2008 R2 的累積更新套件13注意: 因為組建是累加的,所以每個新的修正程式版本都包含先前 SQL Server 2008 R2 修正版本中所包含的所有修復程式及所有安全性修正程式。 我們建議您考慮套用包含此熱修復程式的最新修正版本。 如需詳細資訊,請按一下下面的文章編號,檢視「Microsoft 知識庫」中的文章:

981356 在發行 SQL Server 2008 R2 之後發行的 SQL Server 2008 R2 組建記事 安裝累積更新之後,您應該開啟追蹤標誌4199,以啟用此累積更新中提供的修正(如果下列條件成立):

  • 查詢方案的 TOP 運算子位於另一個 apply/Join 運算子(join 2)右側的嵌套迴圈連接運算子(join 1)的上方。

  • Join 1 的外側有 join 2 外側的外部參照。

  • [聯接 1] 在左邊的欄上使用等號謂語,這是唯一的。

[症狀] 區段中會出現這類查詢的範例。 (這假設資料庫中存在一些唯一性限制式)。 如果有其他查詢包含 TOP、OPTION (FAST N)、IN 或 EXISTS 運算子,且產生類似的問題,但不符合此處所述的模式,請開啟 [追蹤標記 4138]。警告 如果您啟用追蹤標誌4138,包含 TOP、OPTION (FAST N)、IN 或 EXISTS 運算子的其他查詢可能會降低效能。 只有在下列條件成立時,才能使用 Trace 標誌4138:

  • 其對涉及這些運算子之緩慢查詢的影響已確認。

  • 沒有其他有用的解決方法。

  • 在包含類似運算子的其他查詢上,不會偵測到回歸。

狀態

Microsoft 已確認本篇文章<適用於>一節所列之 Microsoft 產品確實有上述問題。

因應措施

若要解決此問題,請使用 LEFT OUTER JOIN 運算子或其中任何一種優化程式提示。

Need more help?

Want more options?

探索訂閱權益、瀏覽訓練課程、瞭解如何保護您的裝置等等。

社群可協助您詢問並回答問題、提供意見反應,以及聆聽來自具有豐富知識的專家意見。

Was this information helpful?

How satisfied are you with the translation quality?
What affected your experience?
By pressing submit, your feedback will be used to improve Microsoft products and services. Your IT admin will be able to collect this data. Privacy Statement.

Thank you for your feedback!

×