|
方法一:直接Delete,效率最低;
delete from table1;
方法二:批量删除,效率次之;
SET STATISTICS TIME ON;
DECLARE @Timer DATETIME = GETDATE();
SET ROWCOUNT 100000;
WHILE 1 = 1
BEGIN
BEGIN TRAN
DELETE FROM [dbo].[Employee];
COMMIT
IF @@ROWCOUNT = 0
BREAK;
END
SET ROWCOUNT 0;
SELECT DATEDIFF(MS, @Timer, GETDATE()) AS [执行时间(毫秒)];
SET STATISTICS TIME OFF;方法三:Truncate,效率最高;
Truncate table1;
- TRUNCATE太快了,清除10W数据一点没压力,批量删除次之,最后的DELTE太慢了;
- TRUNCATE快是因为它属于DDL语句,只会产生极少的日志,普通的DELETE不仅会产生日志,而且会锁记录
<hr/>工作中经常会遇到要删除大表中的数据,或者只保留部分数据,此时,可使用批量导入需要保留的数据到第三个表中,再将原来的表Truncate实现,效率会比在原表中删除数据要高。步骤如下:(如果临时表只做暂时存放数据,第一步也可以不用做,直接使用SELECT..INTO的方式)
1. CREATE TABLE #tmp1 AS (xxx) xxx
2. INSERT #tmp1 SELECT * FROM Original where clause(也可直接select..Into实现,不用创建表结构)
3. DROP TBALE Original
4. EXEC SP_RENAME &#39;#keep&#39;,&#39;Original&#39;
5.添加Original原有索引信息
转自: |
|