使用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