Rac*_*SQL 4 performance sql-server sql-server-2014 bulk-insert query-performance
是否可以删除和索引并重建它,而不是禁用它并重建?
Mar*_*ith 12
我同意“正确答案”不正确。
您不能rebuild删除已删除的索引,您将需要create再次使用它们,并且无论如何在删除和创建索引之后进行插入都是没有意义的。
我认为正确的答案实际上是这样的
由于这是一个堆,因此可以使用
ALTER INDEX ALL ON OrdersHistory DISABLEINSERT ...ALTER INDEX ALL ON OrdersHistory REBUILD与其他可能的替代方案(例如您建议的删除和重新创建所有索引的解决方案)相比,这对现有权限的影响为零,并且管理工作量低。
提议的解决方案没有多大意义,因为:
调用ALTER INDEX ALL堆没有效果;对于堆,它只影响非聚集索引,在建议的解决方案中不再存在任何非聚集索引。即使这个表有一个在删除所有索引的步骤中被删除的聚集索引,它也会是一个堆。正如ALTER INDEX的 MSDN 页面所述:
如果指定了 ALL 并且基础表是堆,则重建操作对表没有影响。与该表关联的任何非聚集索引都将重建。
在这种情况下,ALTER INDEX ALL ... REBUILD操作绝对不会做任何事情,但也不会抛出错误。
如果 的目的ALTER INDEX ALL ... REBUILD是释放未使用的数据页(由于该表是堆,可能需要这样做),那么它仍然没有意义,因为这只发生在ALTER TABLE ... REBUILD(我测试了两个命令)。
永远不会重新创建索引。这似乎有点不负责任;-)
@Martin 在他的回答中提到的一切
关于 的要求minimal administrative effort,@Martin 的回答涵盖了这方面的操作方面,但另一方面,它可以通过比删除和创建索引所需的更细粒度的权限来完成。根据ALTER INDEX(上面链接)的 MSDN 页面:
要执行 ALTER INDEX,至少需要对表或视图具有 ALTER 权限。
基本上,建议的解决方案是:
ALTER INDEX ALL ... REBUILD)这是相当奇怪的建议。我会坚持马丁提出的答案;-)。
| 归档时间: |
|
| 查看次数: |
708 次 |
| 最近记录: |