1

阅读有关数据库效率的内容时,我已经说过表索引会为插入/更新/删除操作带来额外的成本。

在处理单个记录时这不是问题,但在隐含许多记录时可能会出现问题。

我有几个应用程序,我在其中使用 SQL Server 作为 DBMS,并添加了导入操作,允许用户在一次操作中将多条记录加载到业务模型中,而不必为每条记录手动填写表格。

现在我的问题是:在执行导入操作之前在 SQL Server 中禁用表索引是一种好习惯吗?这是否取决于操作中涉及的记录数或数据量?我必须注意与此做法相关的任何辅助问题吗?

4

1 回答 1

3

这取决于

  • 您需要导入多少行,
  • 您需要多久导入一次,
  • 导入需要多长时间,以及
  • 有多少其他人受到影响。

当您删除索引时,您会为所有人删除它们。因此,在您重建它们之前,针对受​​影响表的每个查询都将在没有索引的情况下运行。

当您导入数百万行时,删除索引会产生很大的不同。但是如果它影响到其他用户,我不会删除索引,直到非常清楚没有其他实用的方法可以完成导入。您可以通过以下方式避免影响其他用户

  • 一次导入更少的行(更多事务),
  • 首先导入临时表,或
  • 在非工作时间排队导入。
于 2012-12-04T11:37:23.630 回答