5

1秒あたり約50ヒットを受信するWebアプリケーションがあり、ヒットごとに中央のSQLServerデータベースに約10レコードをアップサートしています。ほぼ3秒に1回、単一のインバウンド接続に対して5000以上の行をアップサーティングしています。

現在、XMLをパラメーターとして受け取るストアドプロシージャがあります。行フィールドが一致しないXMLからメインテーブルにINSERTを実行してから、XMLの値でテーブル全体を更新します。

動作は決して遅くはありませんが、これを行うための最良の方法を本当に知りたいです。SQL Server 2005で実行しているので、MERGE操作はありません。

4

1 に答える 1

6

最初にUPDATEを実行します。そうしないと、挿入したばかりの行が更新されます。

SELECT .. INTO #temp FROM (shredXML)

BEGIN TRAN

UPDATE ... FROM WHERE (matches using #temp)

INSERT ... SELECT ... FROM #temp WHERE NOT EXISTS

COMMIT

XMLを一時テーブルに変更してSQLBulkCopyを使用することも検討します。これは、一般に数百行を超えるXMLを解析するよりも効率的であることがわかりました。これを変更できない場合は、最初にXMLを一時テーブルに細断処理しますか?

于 2011-05-17T12:58:06.847 に答える