Sql-Server
從分區表的分區中刪除所有數據的最快方法是什麼?
我有一個分區表,在現實生活中有 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確實支持截斷分區。如果您使用的是該版本,那絕對是您最快的選擇。