【发布时间】:2014-07-28 19:31:17
【问题描述】:
我有一个日常流程,将大约 150,000 条记录导入两个表,然后将它们连接起来与其他数据进行比较。
我在表上创建了索引,这使得比较过程非常快。不幸的是,在导入过程之后,我的索引上的碎片急剧上升,通常超过 50%。然后我必须重建索引才能运行比较查询。
这对我来说没有意义。插入数据时,索引不应该适当地更新自身吗?索引上是否有任何属性会影响此行为?
编辑: 一些额外的信息——我有两张桌子。在导入过程中,一张表通过插入/选择语句添加了大约 150,000 行。另一个表在应用程序级别从 SQLBulkCopy 获取 150,000 行。
【问题讨论】:
-
你的插入效果如何?
-
阅读有关树重新平衡的信息,例如here,这将帮助您了解为什么应该重新构建索引
-
感谢@Lashane,这很有道理——但是否可以在插入项目时“重新平衡”索引?
-
您可以为每个索引指定一个FILL FACTOR。这可以减少碎片的百分比,并减少在添加/更新行时频繁地重建/重组索引的需要。请注意 - 有一些取舍...
-
@Slider345 是可能的,但是操作繁重且需要时间,因此如果每次插入后将重新平衡整棵树 - 几周后将插入 150,000 行,因此需要权衡,只是养成习惯:在每次批量表更新后 - 重建索引并更新统计信息
标签: sql sql-server tsql indexing