2

真夜中に、ストアド プロシージャで次のようにして、SQL Server 2008 テーブルをアーカイブします。

INSERT INTO archive(col1, col2....)
select col1, col2...
from tablename
where date <= @endDate

delete from tablename where date <= @enddate

これがテーブルスキーマです。明らかに列名を変更しました。アーカイブ テーブルはまったく同じ構造です。

[col1] [uniqueidentifier] NOT NULL,
[col1] [bigint] NOT NULL,
[col1] [nvarchar](255) NOT NULL,
[col1] [nvarchar](255) NOT NULL,
[col1] [datetime] NOT NULL,
[col1] [nvarchar](75) NULL,
[col1] [nvarchar](255) NULL,
[col1] [nvarchar](255) NULL,
[col1] [nvarchar](255) NULL,
[col1] [nvarchar](255) NULL,
[col1] [nvarchar](50) NULL,
[col1] [nvarchar](50) NULL,
[col1] [nvarchar](1000) NULL,
[col1] [nvarchar](2) NULL,
[col1] [nvarchar](255) NULL,
[col1] [nvarchar](255) NULL,

テーブルには通常、いくつかのインデックスを持つ約 100,000 ~ 150,000 行があり、このアーカイブを実行しようとしている間、まだ情報が書き込まれています。

このプロセスには、最速で 6 分、最短で 13 分かかります。

これを行うより速い方法はありますか?

4

2 に答える 2

1

アーカイブを処理するより適切な方法は、パーティションを作成して管理することです。

次のようないくつかのガイドとチュートリアルが利用可能です 。 -split-merge-and-switch-partitions.aspx

于 2013-04-06T16:19:22.510 に答える