SQL Server更新查询只更新表本身而不是索引

时间:2011-08-27 08:52:14

标签: sql-server indexing

我需要编写一个只更新表而不是索引的查询 因为我想更新int字段而不需要更新10个巨大的索引

3 个答案:

答案 0 :(得分:6)

如果int字段包含在任何索引定义中,那么它们也必须更新。

由于显而易见的数据完整性原因,SQL Server不允许基表具有一个值而另一个索引具有另一个值。

如果int字段未包含在任何索引定义中,则无论如何只会更新表。

您可以禁用索引,但重新启用它们涉及重建整个索引。

答案 1 :(得分:5)

这取决于你想要做什么

保持索引与表数据一致是Consistency in ACID。这就是SQL Server和ACID兼容的RDBMS的工作方式。

在某些情况下,例如批量加载,您希望延迟此一致性。因此,如果您有此用例,请删除或禁用索引。

如果禁用索引:

  • 他们将从不用于任何查询 -
  • 所有相关的唯一和外键等也将被禁用
  • 他们没有得到维护

如果你把它们掉落,当然也不能使用它们。

批量加载完成后,再次启用或创建索引/约束。

如果这是你真正想要的,请阅读MSDN:

答案 2 :(得分:1)

或许Filtered Indexes正是您所寻找的。

这是一个SQL Server 2008功能,可让您创建仅适用于列中某些值的索引。