別のテーブルへの外部キーを持つ10億のレコードを持つテーブルをパージする方法は?テーブルと子テーブルをパーティション化し、パーティションスワップを使用する必要がありますか?
これを試して:
declare @CurDate datetime select * into NewTable from ExistingTable where datecol >= @CurDate and datecol <= dateadd(month,3,@CurDate)
私のおすすめ
1)関連するすべての外部キーの作成スクリプトを保存します
SELECT distinct 'alter table '+rcu.TABLE_SCHEMA+'.'+rcu.TABLE_NAME+' add constraint '+rc.CONSTRAINT_NAME+' foreign key ('+rcu.COLUMN_NAME+') references '+rcu1.TABLE_SCHEMA+'.'+rcu1.TABLE_NAME+'('+rcu1.COLUMN_NAME+')'
FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS rc
INNER JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE rcu ON rc.CONSTRAINT_CATALOG = rcu.CONSTRAINT_CATALOG AND rc.CONSTRAINT_NAME = rcu.CONSTRAINT_NAME
INNER JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE rcu1 ON rc.UNIQUE_CONSTRAINT_CATALOG = rcu1.CONSTRAINT_CATALOG AND rc.UNIQUE_CONSTRAINT_NAME = rcu1.CONSTRAINT_NAME
where rcu.TABLE_NAME='YOUR_TABLE'
2)落とした
SELECT distinct 'alter table '+rcu.TABLE_SCHEMA+'.'+rcu.TABLE_NAME+' drop constraint '+rc.CONSTRAINT_NAME
FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS rc
INNER JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE rcu ON rc.CONSTRAINT_CATALOG = rcu.CONSTRAINT_CATALOG AND rc.CONSTRAINT_NAME = rcu.CONSTRAINT_NAME
INNER JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE rcu1 ON rc.UNIQUE_CONSTRAINT_CATALOG = rcu1.CONSTRAINT_CATALOG AND rc.UNIQUE_CONSTRAINT_NAME = rcu1.CONSTRAINT_NAME
where rcu.TABLE_NAME='YOUR_TABLE'
3)ログが大きくならないように、このように削除を実行します
declare @var bigint, @var2 bigint, @var3 bigint
set @var = (select count_big(1) from [Your_Database]..[YOUR_TABLE](nolock) --where filter if it need
set @var2 = 0
set @var3 = 1
while @var2 <> @var
begin
set rowcount 500000
delete from [Your_Database]..[YOUR_TABLE] --where filter if it need
set @var2 = @var2+@@ROWCOUNT
set @var3 = @var3+1
end
4)最後にすべての外国キーを再作成します
同じセッションで新しいスクリプトにスターを付けた後、set rowcount 0を実行することを忘れないでください