Sql-Server

從分區表的分區中刪除所有數據的最快方法是什麼?

  • April 21, 2017

我有一個分區表,在現實生活中有 8000 萬行。

出於測試目的,我在這裡創建並分區了這個表

當我執行以下查詢時:

select * from countries
where visit >= '20110101'
 and visit <= '20111231'

正如您在此處和下圖中的查詢計劃中看到的那樣,它使用分區消除,所以我知道我做對了。

在此處輸入圖像描述

我知道分區通常不是為了加快我的查詢速度,它是一種管理功能,但是,它可以加快對大表的查詢速度

我將首先說明我不想要什麼。我不想從我的表中刪除任何分區

我想要的是?

我想以最快的方式從分區中刪除所有數據:

有什麼比這更快的嗎? 不考慮批量刪除

BEGIN TRANSACTION T1

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

--COMMIT TRANSACTION T1

查詢計劃在這裡

在此處輸入圖像描述

不幸的是,SQL Server 2014 不支持分區上的 TRUNCATE。要麼刪除並重新創建它,要麼將其切換出去。

在此處查看更長的討論。

SQL Server 2016確實支持截斷分區。如果您使用的是該版本,那絕對是您最快的選擇。

引用自:https://dba.stackexchange.com/questions/171625