web-dev-qa-db-ja.com

パーティションテーブルのパーティションからすべてのデータを削除する最も速い方法は何でしょうか。

私は実際には8000万行のパーティションテーブルを持っています。

テストの目的で このテーブルをここで作成してパーティション分割しました

次のクエリを実行すると:

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

あなたが見ることができるように ここでのクエリプラン と下の画像では、それは パーティションの削除 を使用しているので、私は私が正しいことをしていることを知っています。

enter image description here

パーティションは通常、クエリを高速化するためのものではありません ですが、これは管理機能ですが、 大きなテーブルでのクエリを高速化 は可能です。

まず、私が望まないことを述べることから始めます。 テーブルからパーティションを削除 したくありません。

私が欲しいものは?

パーティションからすべてのデータを可能な限り迅速に削除したい:

何かがこれより速いのでしょうか? 一括削除を考慮せずに

BEGIN TRANSACTION T1

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

--COMMIT TRANSACTION T1

クエリプランはこちら

enter image description here

1

SQL Server 2014は、残念ながらパーティションのTRUNCATEをサポートしていません。ドロップして再作成するか、切り替えてください。

より長い議論を見る ここ

SQL Server 2016はパーティションの切り捨てをサポートしていますdoes。そのバージョンを使用している場合、それが間違いなく最速のオプションです。

8
CalZ