Delete
sql server上的s有时很慢,我经常需要优化它们以减少所需的时间.我一直在寻找有关如何做到这一点的提示,我发现了各种各样的建议.我想知道你最喜欢和最有效的技术,以驯服删除野兽,以及它们的工作方式和原因.
到现在:
确保外键有索引
确保索引的条件
用于 WITH ROWLOCK
销毁未使用的索引,删除,重建索引
该你了.
Joh*_*som 22
您可能会对以下文章" 快速订购删除操作 "感兴趣.
该解决方案侧重于利用视图以简化为批量删除操作生成的执行计划.这是通过引用给定的表一次而不是两次来实现的,这反过来减少了所需的I/O量.
Eri*_*ler 15
我对Oracle有更多的经验,但很可能同样适用于SQL Server:
qui*_*ker 10
我想知道是不是垃圾收集数据库的时候了?您将行标记为删除,服务器稍后在扫描期间将其删除.你不希望每次删除都有这个 - 因为有时一行必须现在去 - 但它偶尔会很方便.
2014-11-05答案摘要
这个答案被标记为社区维基,因为这是一个不断变化的主题,有很多细微差别,但整体上答案很少.
第一个问题是你必须问自己你正在优化的场景是什么?这通常是在db上具有单个用户的性能,或者在db上具有许多用户的扩展.有时答案恰恰相反.
对于单用户优化
TABLELOCK
SET ROWCOUNT 20000
(或其他任何东西,取决于日志空间)和循环(可能有一个WAITFOR DELAY
),直到你摆脱它(@@ROWCOUNT = 0
)用于多用户优化
用于一般优化
WHERE
子句有索引WHERE
使用视图或派生表标识要在子句中删除的行,而不是直接引用该表.[阅读更多...]说实话,从表中删除一百万行的方式与插入或更新一百万行一样严重.这就是行集的大小问题,你可以做的并不多.
我的建议:
归档时间: |
|
查看次数: |
76499 次 |
最近记录: |