在SQL Server中,如何快速删除大表中的数据呢?回答这个问题前,我们必须弄清楚上下文环境和以及结合实际、具体的需求,不同场景有不同的应对方法。
1: 整张表的数据全部删除
如果是整张表的数据全部清空、删除,这种场景倒是非常简单,TRUNCATE TABLE肯定是最快的。 反而用DELETE处理的话,就是一个糟糕的策略。
2: 大表中删除一部分数据
对于场景1、非常简单,但是很多实际业务场景,并不能使用TRUNCATE这种方法,实际情况可能只是删除表中的一部分数据或者进行数据归档后的删除。假设我们遇到的表为TEST,需要删除TEST表中的部分数据。那么首先我们需要对表的数据量和被删除的数据量做一个汇总统计,具体,我们应该采用下面方法:
·检查表的数据量,以及要删除的数据量。然后计算删除的比例,
sp_spaceused'dbo.TEST';
SELECT COUNT(*) AS DELETE_RCD WHERE TEST WHERE ......
2.1 删除大表中绝大部分的数据,但是这个绝大部分怎么定义不好量化,所以我们这里就量化为60%。如果删除的数据比例超过60%,就采用下面方法:
1: 新建表TEST_TMP
2:将要保留的数据转移到TEST_TMP
3: 将原表TEST重命名为TEST_OLD, 而将TEST_TMP重命名为TEST
4: 检查相关的触发器、约束,进行触发器或约束的重命名
5: 核对操作是否正确后,原表(TEST_OLD)要