批量索引更新?

时间:2011-08-18 14:18:17

标签: sql-server-2005 tsql indexing

我一次在一组表中写入数百或可能数千行,每个表都严重在内部和通过索引视图编制索引。

通常,插入行在插入行将在索引中相邻的位置发生。

我希望这些插页很昂贵,但它们非常慢。我认为性能问题的一部分是每个INSERT都在更新索引。

有没有办法告诉SQL Server推迟更新索引,直到我完成我的批量插入,这样索引树只需要更新一次?

这些作为单独的语句执行,因为需要在保存期间向用户显示进度条并记录任何单个问题,但这些都来自C#中的相同连接。如果需要,我可以将它们放在交易中,但我不愿意。

1 个答案:

答案 0 :(得分:0)

您正在支付以某种方式将这些行添加到索引的成本。在插入期间不更新索引会导致并发语句的准确性问题 - 对该表使用任何索引的任何查询都不会“看到”新行!

如果速度至关重要,并且插入后的停机时间不是主要问题,您可以:

  • 禁用目标表上的非聚集索引
  • 惰性
  • 重建非聚集索引

你可能应该更多地澄清一下你的桌子:

  • 桌子有多宽?
  • 有多少索引?
  • 索引有多宽?

如果您有20个索引且每个索引有5个字段,那么您实际上每行更新100个额外字段,这会很快变得昂贵。