Sql-Server

SSMS 建議索引和兼容性模式

  • December 13, 2016

我正在執行一個舊的生產應用程序,它的後端數據庫託管在兼容模式 80 (SQL2000) 的 SQL2008R2 上。當我執行一些 TSQL 來查看實際的執行計劃時,SSMS 給了我建議的索引,這些索引只對 SQL2005+ 合法,例如包含列的索引。我怎樣才能防止它這樣做?我想查看它可能建議的合理索引。

注意:無法更改兼容模式。是的,我們正在替換應用程序,這將完全消除對數據庫的需求,但暫時不會。

注意:已經嘗試過,SSMS 被配置為 SQL Server 2000 的“伺服器版本腳本”。

我的數據庫也停留在 CL80,也在 2008r2:我剛剛測試過,它們允許INCLUDE定義帶有 ed 列的索引。我沒有明確測試過它們是否被正確使用,因此在依賴此檢查適當的查詢以查看創建了哪些計劃之前。

如果包含的列未正確使用以避免查找,您可以將它們轉換為已使用的列,即CREATE INDEX ix_test_u1_i2 ON tbl_test (i1) INCLDUE (i2)會變為CREATE INDEX ix_test_u1_i2 ON tbl_test (i1, i2). 不過,請對結果進行基準測試,或者在索引維護計劃中考慮它,因為如果後面的列相當隨機,則可以顯著增加索引碎片的級別(通過插入/更新時的頁面拆分)。- 編輯:根據 Paul 的評論,INCLUDE查詢計劃器正確使用了 ed 列創建的索引,因此該評論沒有實際意義。當然,如果您的應用程序具有仍在SQL2000 上實際執行的實例,而不僅僅是將 CL 設置為 80,則將其改回…

順便說一句:SSMS 顯示的缺失索引資訊只能被視為您考慮某事的建議 - 這些建議可能對整個應用程序有害,特別是如果您遵循所有這些建議(使用的額外空間可能相當大)。

引用自:https://dba.stackexchange.com/questions/158006