我有一个表有超过100万条记录,我创建了一个存储过程来在该表中插入数据,然后插入数据我需要截断表但截断时间太长。
我已经阅读了一些链接,如果某个表被其他人使用或者某些锁被应用,那么truncate需要很长时间,但是在这里我是唯一的用户而且我没有应用任何锁。
当我试图截断表时,也没有打开其他事务。
由于我的数据库在SQL Azure上,我不应该删除索引,因为它不允许我插入没有索引的数据。
答案 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