0
大規模なテーブルと何百万行も比較し、差異をログテーブルに挿入する必要があります。バッチで大規模な実行を実行する
問題は、格納されたprocが大きくなり(LDF)、データベースのディスク領域が限られていることです。
私はコミットがLDFをMDFに書き込むことを知っています。
次の比較をバッチで実行するには、どうすれば10万行ごとにコミットできますか?
BEGIN TRY
BEGIN TRANSACTION;
INSERT INTO dbo.CustomerLog
(OnlineStore ,
PhoneNumber ,
ChangeType
)
SELECT 'Online Store a' ,
AreaCode + PhoneNumber ,
'Added'
FROM dbo.StoreAList a
WHERE NOT EXISTS (SELECT 1
FROM dbo.StoreAListCompare b
WHERE (b.AreaCode + b.PhoneNumber) = (a.AreaCode
+ a.PhoneNumber));
COMMIT TRANSACTION
END TRY
BEGIN CATCH
ROLLBACK TRANSACTION
END CATCH;
CREATE TABLE [dbo].[StoreAList](
[ListID] [bigint] IDENTITY(1,1) NOT NULL,
[AreaCode] [char](3) NOT NULL,
[PhoneNumber] [char](7) NOT NULL,
[RecordDate] [datetime] NULL CONSTRAINT [DF_StoreAList_RecordDate] DEFAULT (getdate())
) ON [PRIMARY]
CREATE TABLE [dnc].[StoreAListCompare](
[ListID] [BIGINT] IDENTITY(1,1) NOT NULL,
[AreaCode] [CHAR](3) NOT NULL,
[PhoneNumber] [CHAR](7) NOT NULL,
[RecordDate] [DATETIME] NULL DEFAULT (GETDATE())
) ON [PRIMARY]
次のように: 'StoreAList'と' StoreAListCompare'を_single_index pで索引付けすると、パフォーマンスの変化が気になるだけです'AreaCode'と' PhoneNumber'の両方を含む 'er'テーブルを作成し、フィールドを別々に比較するために' where'を変更します。 – HABO
はい、インデックスはありますが、問題はパフォーマンスではなくログです –