截断声明花费太多时间

时间:2014-08-11 16:52:34

标签: sql azure truncate

我有一个表有超过100万条记录,我创建了一个存储过程来在该表中插入数据,然后插入数据我需要截断表但截断时间太长。

我已经阅读了一些链接,如果某个表被其他人使用或者某些锁被应用,那么truncate需要很长时间,但是在这里我是唯一的用户而且我没有应用任何锁。

当我试图截断表时,也没有打开其他事务。

由于我的数据库在SQL Azure上,我不应该删除索引,因为它不允许我插入没有索引的数据。

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

从Azure中删除时,您可能遇到各种麻烦,但截断几乎总是锁定问题。如果你无法修复,那么从Azure中删除时总是可以做到这一点。

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