Sql-Server
索引清理/使用幫助
我的問題是:執行時
sp_blitzindex
,我收到很多這兩個警告/建議:索引囤積者:未使用的 NC 索引
和
Feature-Phobic Indexes:潛在的過濾索引(基於列名)
使用index hoarder,這些是我針對 FK 列建構的索引。我認為在我讀到的某個地方是一個好主意。
使用feature-phobic,我設置了使用這些 cols 的索引(索引定義中的 where 子句),但是在使用 時
sp_blitzindex
,我得到了很多關於不使用該功能的索引的建議。(它要麼將位欄位卡在包含或索引本身中。)您對是否將索引保留在 FK 上有何想法?而且,您認為我在哪裡可以獲得最大的索引(您的 blitzindex 的功能或結果?)
現在,這被用於具有一些用於搜尋的平面表的 OLTP 系統。
索引囤積者告訴你,歷史上這個索引沒有被使用。因此,維護索引是 CPU、I/O 和儲存方面的成本,但您不會從這些索引中獲得任何性能優勢。
為索引考慮外鍵的一般策略是好的一般計劃,但很可能應該刪除未使用的索引。
這是一個關於自己檢查索引的連結: http ://www.mssqltips.com/sqlservertutorial/256/discovering-unused-indexes/
該文章中的一段程式碼顯示了一些查詢詳細資訊:
SELECT OBJECT_NAME(S.[OBJECT_ID]) AS [OBJECT NAME], I.[NAME] AS [INDEX NAME], USER_SEEKS, USER_SCANS, USER_LOOKUPS, USER_UPDATES FROM SYS.DM_DB_INDEX_USAGE_STATS AS S INNER JOIN SYS.INDEXES AS I ON I.[OBJECT_ID] = S.[OBJECT_ID] AND I.INDEX_ID = S.INDEX_ID WHERE OBJECTPROPERTY(S.[OBJECT_ID],'IsUserTable') = 1 AND S.database_id = DB_ID()
考慮刪除未使用的索引。如果您有一份真正使用索引的年度工作,請考慮僅為該工作創建它。
Feature-Phobic Indexes表明過濾索引可能比標準索引更有價值。過濾索引將僅涵蓋滿足您的搜尋條件的行。
這有點推測,但建議是嘗試一些過濾索引。如果它們對您不起作用,您可以再次刪除它們。