我应该在截断/大插入后重建索引吗?

Blu*_*ppy 12 performance index sql-server

我有一个存储过程,在插入新数据(基于其他表中的数据、计算等)之前,它会截断一些包含大约 1.75M 行的表。

基本大纲很简​​单:

  • 截断表
  • 以每次大约 75,000 的“批次”插入 1.75M 行。

我想知道我是否应该在此过程中的任何时候明确重新构建索引?例如

  • 截断表
  • ALTER INDEX ALL ON xxx REBUILD WITH (FILLFACTOR=90) [或类似的东西]
  • 插入 175 万行

也许

  • ALTER INDEX ALL ON xxx DISABLE
  • 截断表
  • 插入 175 万行
  • ALTER INDEX ALL ON xxx REBUILD WITH (FILLFACTOR=90) [或类似的东西]

感谢任何帮助......不是 DBA - 非常了解 DB 的开发人员更准确!

Ben*_*hul 6

与大多数此类问题一样,这取决于。您不太可能以“正确”的顺序为所有涉及的索引插入数据,这意味着所有这些索引都可能在插入过程中遇到大量页面拆分。因此,让我们假设您按聚集索引顺序插入。您可以禁用所有非聚集索引、截断、插入,然后重建所有非聚集索引。当然,无论背后的理论如何,尝试这两种方法都会告诉您哪种方法更快。:)