使用sql Server 2005.
我正在执行一个巨大的DELETE FROM而没有where子句.它基本上等同于TRUNCATE TABLE语句 – 除了我不允许使用TRUNCATE.问题是表格很大 – 1000万行,完成需要一个多小时.有没有办法让它更快,没有:
>使用截断
>禁用或删除索引?
t-log已经在一个单独的磁盘上.
欢迎任何建议!
解决方法
您可以做的是批量删除,如下所示:
- SELECT 'Starting' --sets @@ROWCOUNT
- WHILE @@ROWCOUNT <> 0
- DELETE TOP (xxx) MyTable
例如,xxx是50000
- SELECT col1,col2,... INTO #Holdingtable
- FROM MyTable WHERE ..some condition..
- SELECT 'Starting' --sets @@ROWCOUNT
- WHILE @@ROWCOUNT <> 0
- DELETE TOP (xxx) MyTable WHERE ...
- INSERT MyTable (col1,...)
- SELECT col1,... FROM #Holdingtable