从分区表的分区中删除所有数据的最快方法是什么?

Mar*_*lli 2 sql-server delete optimization partitioning sql-server-2014

我有一个分区表,在现实生活中它有 8000 万行。

出于测试目的,我在这里创建并分区了这个表

当我运行以下查询时:

select * from countries
where visit >= '20110101'
  and visit <= '20111231'
Run Code Online (Sandbox Code Playgroud)

正如您在此处和下图的查询计划中看到那样,它使用分区消除,所以我知道我在做一些正确的事情。

在此处输入图片说明

我知道分区通常不是为了加速我的查询,它是一个管理功能,但是,它可以加速对大表的查询

我将首先说明我不想要的东西。我不想从我的表中删除任何分区

我想要的是?

我想以最快的方式从分区中删除所有数据:

有什么比这更快的吗? 不考虑批量删除

BEGIN TRANSACTION T1

DELETE 
FROM dbo.countries WITH (TABLOCKX)
WHERE visit >= '20110101'
  AND visit <= '20111231'

--COMMIT TRANSACTION T1
Run Code Online (Sandbox Code Playgroud)

查询计划在这里

在此处输入图片说明

Cal*_*alZ 8

不幸的是,SQL Server 2014 不支持分区上的 TRUNCATE。要么删除并重新创建它,要么将其关闭。

请参阅此处的详细讨论。

SQL Server 2016确实支持截断分区。如果您使用该版本,那绝对是您最快的选择。