首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Truncate语句占用的时间太长

Truncate语句占用的时间太长
EN

Stack Overflow用户
提问于 2014-08-12 00:52:34
回答 2查看 10.7K关注 0票数 3

我有一个有100多万条记录的表,我已经创建了一个存储过程来在该表中插入数据,在插入数据之前,我需要截断表,但截断花费的时间太长了。

我在一些链接上读到,如果一个表被另一个人使用,或者应用了一些锁,那么truncate会花费太长的时间,但在这里,我是唯一的用户,并且我没有在上面应用锁。

此外,当我尝试截断该表时,没有打开任何其他事务。

因为我的数据库在SQL Azure上,所以我不应该删除索引,因为它不允许我在没有索引的情况下插入数据。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-29 17:28:04

从表中删除所有索引,然后截断,如果要插入数据,则插入数据,然后在插入数据后重新创建索引

票数 4
EN

Stack Overflow用户

发布于 2014-08-27 14:57:16

当从Azure中删除时,你可能会遇到各种各样的麻烦,但截断几乎总是一个锁定的问题。如果你不能解决这个问题,你可以在从Azure中删除的时候使用这个技巧。

代码语言:javascript
复制
declare @iDeleteCounter int =1
while @iDeleteCounter > 0
begin
    begin transaction deletes;
    with deleteTable as
    (
        select top 100000 * from  mytable where mywhere
    )
    delete from deleteTable
    commit transaction deletes
    select @iDeleteCounter = count(1) from   mytable where mywhere

    print 'deleted 100000 from table' 

end
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25248431

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档