我有一个有100多万条记录的表,我已经创建了一个存储过程来在该表中插入数据,在插入数据之前,我需要截断表,但截断花费的时间太长了。
我在一些链接上读到,如果一个表被另一个人使用,或者应用了一些锁,那么truncate会花费太长的时间,但在这里,我是唯一的用户,并且我没有在上面应用锁。
此外,当我尝试截断该表时,没有打开任何其他事务。
因为我的数据库在SQL Azure上,所以我不应该删除索引,因为它不允许我在没有索引的情况下插入数据。
发布于 2015-03-29 17:28:04
从表中删除所有索引,然后截断,如果要插入数据,则插入数据,然后在插入数据后重新创建索引
发布于 2014-08-27 14:57:16
当从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'
endhttps://stackoverflow.com/questions/25248431
复制相似问题