Fajela Tajkiya Asked: 2022-09-26 08:26:58 +0800 CST2022-09-26 08:26:58 +0800 CST 2022-09-26 08:26:58 +0800 CST 禁用索引的用例是什么? 772 我刚刚了解到可以在表上禁用索引。甚至可以禁用聚集索引。之后,如果聚集索引,用户将无法访问索引或数据。我们什么时候禁用索引?我只是不明白用例。 sql-server index 3 个回答 Voted Best Answer AMtwo 2022-09-26T09:10:02+08:002022-09-26T09:10:02+08:00 当您将(或可能)需要替换索引时,禁用索引(或表上的所有索引)可能非常方便。 例如,如果您要删除(看似)重复的索引,则可以禁用重复项并将其禁用一段时间,同时确认可以永久删除它。如果您发现需要它,您可以简单地重新启用它,而无需知道完整的定义。您仍然需要进行完全重建,但不需要记住/保存定义。 同样,对于您可能希望在不维护索引的情况下加载的数据加载,您可以更轻松地动态禁用所有索引,然后重新启用它们,而不必像删除并重新创建它们那样完全保留索引定义。 Tibor Karaszi 2022-09-27T01:55:39+08:002022-09-27T01:55:39+08:00 AMtwo 很好地涵盖了非聚集索引。 至于聚集索引,这是一件很奇怪的事情。我能想到的唯一潜在用例是,如果您想确保没有人可以访问数据。当然,只要有足够的权限,您就可以再次启用(重建)它并访问数据。所以,我怀疑你会认为这是一项安全功能。最后,它可能只是暴露给我们的东西,最初是在 SQL Server 内部使用的,用例非常有限(如果有的话)。 请注意,如果禁用聚集索引,则所有非聚集索引以及引用该表的外键也会被禁用! 如果您出于某种原因不希望该视图的存储开销,并且稍后想要启用它,则禁用视图上的聚集索引可能很有用(感谢 Paul)。请注意,在禁用索引时,对该视图使用 NOEXPAND 提示的查询将失败。 Neil 2022-09-28T03:54:30+08:002022-09-28T03:54:30+08:00 在批量更新期间在索引中创建条目的开销太大的用例如何,因此禁用索引、批量更新、重新启用/重新索引实际上会更快、更便宜。
当您将(或可能)需要替换索引时,禁用索引(或表上的所有索引)可能非常方便。
例如,如果您要删除(看似)重复的索引,则可以禁用重复项并将其禁用一段时间,同时确认可以永久删除它。如果您发现需要它,您可以简单地重新启用它,而无需知道完整的定义。您仍然需要进行完全重建,但不需要记住/保存定义。
同样,对于您可能希望在不维护索引的情况下加载的数据加载,您可以更轻松地动态禁用所有索引,然后重新启用它们,而不必像删除并重新创建它们那样完全保留索引定义。
AMtwo 很好地涵盖了非聚集索引。
至于聚集索引,这是一件很奇怪的事情。我能想到的唯一潜在用例是,如果您想确保没有人可以访问数据。当然,只要有足够的权限,您就可以再次启用(重建)它并访问数据。所以,我怀疑你会认为这是一项安全功能。最后,它可能只是暴露给我们的东西,最初是在 SQL Server 内部使用的,用例非常有限(如果有的话)。
请注意,如果禁用聚集索引,则所有非聚集索引以及引用该表的外键也会被禁用!
如果您出于某种原因不希望该视图的存储开销,并且稍后想要启用它,则禁用视图上的聚集索引可能很有用(感谢 Paul)。请注意,在禁用索引时,对该视图使用 NOEXPAND 提示的查询将失败。
在批量更新期间在索引中创建条目的开销太大的用例如何,因此禁用索引、批量更新、重新启用/重新索引实际上会更快、更便宜。