【发布时间】:2016-10-20 23:53:35
【问题描述】:
我有一个 3600 万行的堆表,我正在尝试删除选定的 600 万行。当我在 100 批中删除时,读取为 16++++++,写入为 113,因此我在 Identity 列上添加了 NON-clus 索引以加快读取速度,现在读取为 34899,写入为 3508,并添加了一个 NON-clus Idx它增加了写入 IO 的增长。
那么要知道为什么 SQL Server 在后台执行的操作与我看到的表删除计划中的差异如此之大是 8% 并且没有更多详细信息。
此外,当我删除我的数据页面并且使用的页面越来越多时,令人难以置信..我查询 sys.allocation 单位来检查
当我删除 2500 行时,我的日志文件增加到 42 MB,碎片从 0.02 增加到 2.96
只是在执行此操作之前添加更多内容,我删除了 2 个 Nvarchar 列,然后清理表并重建它
【问题讨论】:
-
我有点理解你的问题是一个信息而不是问题。
-
如果您有一个堆并在没有 TABLOCK 提示的情况下删除,SQL Server 不会释放空间。这当然使它更简单,但在某些时候你需要对浪费的空间做点什么......
标签: sql sql-server sql-server-2012 sql-server-2014