sql-server - MS SQL Server:暂时禁用索引,但保持更新以便快速重新启用
问题描述
我知道disable
. alter index
但这不仅禁用它对查询的使用,它还会删除索引数据,因此如果您稍后重新启用它,则需要从头开始重建数据。
假设我有一个我认为很少使用的索引。我已经检查了性能计数器,sys.dm_db_index_usage_stats
并试图确保删除索引不会显着影响应用程序性能。尽管如此,我可能是错的,我可能会犯错误。我宁愿暂时禁用索引,因此查询优化器不会使用它,但是当写入表时索引仍将保留在磁盘上。几天后,我可以采取第二步并完全删除索引。如果事实证明我错了,我可以立即重新启用索引,而无需从头开始重建它。
明确一点——假设它是一张大表上的一个大索引,而且我没有昂贵的 MSSQL 版本可以让我进行在线索引创建。因此,如果以及何时重新启用索引,我想避免长时间等待。
是否有一些技巧可以让我禁用查询的索引,所以我可以额外确保没有任何东西放慢速度,如果它后来被删除?我正在使用 MSSQL 2016,但我也会对更高版本的答案感兴趣。
解决方案
是否有一些技巧可以让我禁用查询的索引,所以我可以额外确保没有任何东西放慢速度,如果它后来被删除?
不,SQL Server 中没有这样的功能。Azure SQL 数据库实现了自动索引管理,而无需此类功能,只需监视索引统计信息和缺失的索引即可。
推荐阅读
- javascript - 最接近 ES6 的转换 jQuery 为 bg 添加 CSS
- javascript - 用 vanilla javascript 重新组织 json 数据
- unit-testing - 如何在 GOLANG 中获取多个文件的覆盖率
- unity3d - Unity2D:在拖动预制件时播放实例化预制件的动画
- jquery - Laravel 5 with Blade ... 使用 jQuery 使用辅助函数 route() 时我无法设置数据属性,但可以使用相对路径
- security - 如果 IP 地址不是“秘密”,IP 地址白名单是否有用?
- php - 使用 Eloquent 从具有外键的单个表中获取数据到另外两个表 - laravel
- android - 跨客户端 Google OAuth:Xamarin/Android 到 .NET Web 服务
- extract - .EAppxBundle 与 .AppxBundle 相比是什么
- java - 停止编辑日期选择器和组合框字段而不禁用它们