优化插入/删除的SQL Server群集密钥

时间:2012-08-25 10:07:15

标签: sql-server performance

我有一些定期传递新数据的报告活动,我目前的策略是删除旧数据然后插入新数据,我使用范围查询在一段时间内批量移动报告数据。

我的插入效果应该非常出色,因为我在这里做的所有数据都在增加,我使用datetime2(7)数据类型和sysdatetime()作为默认值

但是,我担心碎片问题。

旧数据将是第一个被写入但最终将被删除的数据,并且新数据(替换此数据)将被附加到末尾。

我的数据应该在更新时有效地进入未来。

除了所有旧数据外,我完全被删除了。

我还需要担心碎片还是会这样呢?我怀疑这会有很好的表现,但我仍然有点担心SQL Server无法收回已删除的空间。

1 个答案:

答案 0 :(得分:1)

我知道您将以聚簇索引顺序插入和删除。这种设计非常合理。一段时间后,您可能仍会在插入上出现碎片,因为插入将重复使用已删除的页面。可能存在异常现象,例如单个页面未被释放或其他杂项页面存在于用于插入的范围内。从这个意义上说,碎片化会导致更多的碎片化作为一个随机过程。

保证不会出现碎片的唯一方法是粗略地对数据进行分区,并将每个分区放在一个新的文件组中。这可确保插入始终位于文件的末尾(无需放置它们的其他位置)。此外,删除最终会导致整个分区有资格删除。

你有非聚集索引吗?他们也可能变得支离破碎。