Sql-Server
辨識所需索引的工具
我想為我的數據庫中的每個表創建最佳索引。SQL Server 中是否有查詢或工具可幫助完成此過程?
是的,有一些工具,比如數據庫引擎優化顧問。它隨 SQL Server 一起提供,並做了一些非常討厭的事情:
- 它允許您只考慮非常小的工作負載(甚至是單個查詢)。然後,它會建議可能只幫助小工作負載的索引,而不考慮其他工作負載(索引有助於加快某些查詢,但它們可以減慢其他查詢,尤其是插入/更新/刪除),別管其餘的的商業周期。
- 它通常會推薦僅因尾隨列或包含列而異的冗餘索引。
- 它真的,真的,真的很喜歡包含的專欄——我認為這可能是一種迷信。
索引調整的正確方法是考慮整個業務週期內的整個工作負載。有時,使用 3rd 方工具比重新發明輪子更好。DBSophic製作了一個名為 Qure Workload Analyzer 的免費產品,我認為它比 DTA 做得更好——但他們的許可工具(Qure Workload Optimizer)在它的作用上絕對是驚人的。去年,我在部落格中介紹了該工具與 SQL Sentry 集成時的工作原理)。
還有一些其他選項,例如 DMV 中報告缺少索引,您還可以發現正在寫入哪些索引(因此它們佔用空間並影響插入/更新/刪除操作)但從不(或很少) 使用者查詢使用:
但這些也需要注意,DMV 僅在上次 SQL Server 重新啟動後才有效,並且它們不一定涵蓋適當的業務週期(因此可能會失去重要資訊