Microsoft 會以一個可下載的檔案發行 Microsoft SQL Server 2008 R2 Service Pack 1 (SP) 1 或 Microsoft SQL Server 2012 修正程式。 由於是累積修正程式,因此每個新版本都包含先前的 SQL Server 2008 R2 Service Pack 1 (SP1) 或 Microsoft SQL Server 2012 更新版本中包含的所有 Hotfix 和所有安全性更新。
症狀
請考慮以下案例:
- 您從 Microsoft SQL Server 2005 升級至 Microsoft SQL Server 2008、Microsoft SQL Server 2008 R2 或 Microsoft SQL Server 2012。
- 您執行使用 sp_cursoropen 預存程序的查詢,然後指定 rowcount 參數來擷取資料表的前幾個資料列。
在此案例中,效能可能會比在 SQL Server 2005 中執行相同的查詢還要慢。
原因
發生此問題的原因是查詢最佳化工具使用靜態資料指標計畫,而非動態資料指標計畫。 如果是靜態游標計劃,SQL Server 會擷取所有資料列,並將它們插入游標工作資料表中。 不過,針對動態資料指標計劃,SQL Server 只會擷取所需的資料列。
解決方式
累積更新資訊
SQL Server 2012
此問題的修正程式最初在 SQL Server 2012 的累積更新 1 中發行。 如需有關此累積更新套件的詳細資訊,請按一下下面的文章編號,檢視「Microsoft 知識庫」中的文章:
2679368 SQL Server 2012 累積更新套件 1 注意 由於這些組建是累積的,因此每個新發行的修正程式都包含所有 Hotfix 和所有安全性修正程式,這些修正程式隨附於上一個 SQL Server 2012 修正程式版本。 Microsoft 建議您考慮套用包含此 Hotfix 的最新修正版本。 如需詳細資訊,請按一下下面的文章編號,檢視「Microsoft 知識庫」中的文章:
2692828 SQL Server 2012 發行之後所發行的 SQL Server 2012 組建 您必須將 SQL Server 2012 Hotfix 套用至 SQL Server 2012 的安裝。
SQL Server 2008 R2 SP1 的累積更新套件 5
套用此 Hotfix 之後,請啟用追蹤旗標 4199。
此問題的修正程式最初在累積更新 5 中發行。 如需有關如何取得 SQL Server 2008 R2 SP1 累積更新套件的詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的文件:
2659694 SQL Server 2008 R2 SP1 的累積更新套件 5 注意 由於這些組建是累積的,因此每個新發行的修正程式都包含所有 Hotfix 和先前 SQL Server 2008 R2 SP1 修正程式版本中包含的所有安全性修正程式。 建議您考慮套用包含此 Hotfix 的最新修正版本。 如需詳細資訊,請按一下下面的文章編號,檢視「Microsoft 知識庫」中的文章:
2567616 SQL Server 2008 R2 SP1 發行之後所發行的 SQL Server 2008 R2 組建
因應措施
若要解決此問題,請將 FAST 查詢提示新增至查詢。
更多資訊
如需有關如何使用查詢提示的詳細資訊,請造訪下列 MSDN 網站:
關於如何使用查詢提示的一般資訊 如需有關追蹤旗標 4199 的詳細資訊,請造訪下列網站:
狀態
Microsoft 已確認這是「適用對象」一節中列出的 Microsoft 產品中的問題。