回答

收藏

SQL DELETE-最大行数

技术问答 技术问答 195 人阅读 | 0 人回复 | 2023-09-14

对SQL句子中删除的行数应设置哪些限制?
& `; \9 b- }! @2 O& U9 k) T我们需要从空废纸,我们需要从1删除到几十万行,并应用一些最佳的实践限制bas时不会绝对终止SQL Server或填写日志。
* `( @3 Y0 n% Z2 c; v4 j# e1 ]此问题并非特定于任何类型的数据库。
8 B0 }) E8 f( K9 g8 Q- _4 O                                                                ' c" W( I& B  V2 Z
    解决方案:                                                               
) S% b& j; x5 b. B' p                                                                这是一个非常广泛的问题,基本上可以归因于依赖。影响它的因素包括:
0 m. q/ Z4 u, z/ c你的并发级别是多少?delete语句在受影响的行上设置排他锁。这些信息可能会升级到页面或整个表,如数据库引擎、删除的数据分布等。在删除期间可以阻止您的数据读取器吗?
! S4 C$ G8 e1 ?2 S6 ]delete句子有多复杂?你想加多少个其他表,或者有多复杂?WHERE句子?有时候,要删除的行标志可能比删除本身更昂贵,所以一个大的删除可能是便宜
$ [8 t4 n: o' Z/ f5 a8 \: k你担心僵局吗?随着删除尺寸的减少,死锁的占用空间也减少了。理想情况下,单行删除将永远成功。
8 Q2 B9 H. g* ^7 u) a$ R/ ?3 f你关心吞吐量的性能吗?还有任何?SQL句子是一样的,通常是恒定的(连接内容、查询分析、返回结果等)。).从单个连接的角度来看,删除1000行比,删除1000 x 1行要快。2 D( q3 D! ?+ n' v" \$ H. {
不要忘记索引维护费用、碎片清洗或任何触发器。它们也会影响你的系统。( O4 Y( [& s; H
然而,总的来说,我以每个句子1000行为基准。我使用的大多数系统(企业)最终每次删除都有500到5000条记录。我喜欢这样做:
7 C. c/ [/ \4 H3 ?8 O6 xset rowcount 500select 1    -- Just to force @@rowcount > 0while @@ROWCOUNT > 0delete from [table]     [where ...]
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则